openapi: 3.0.3
info:
  title: 'Imobiznets Inc. API Documentation'
  description: ''
  version: 1.0.0
servers:
  -
    url: 'http://imobiznets-backend-prod-yxxo2i-fecde5-136-112-175-192.traefik.me'
tags:
  -
    name: Abonnements
    description: ''
  -
    name: 'Abonnements Admin'
    description: ''
  -
    name: Authentification
    description: ''
  -
    name: Endpoints
    description: ''
  -
    name: 'Invoices (Factures)'
    description: ''
  -
    name: Paiements
    description: ''
  -
    name: Propriétés
    description: 'Mini description: Liste paginée des propriétés avec filtres et indicateur de disponibilité.'
  -
    name: Réservations
    description: ''
  -
    name: 'Smart Locks'
    description: ''
  -
    name: Tâches
    description: ''
  -
    name: Utilisateur
    description: ''
components:
  securitySchemes:
    default:
      type: http
      scheme: bearer
      description: 'Connectez-vous via <code>POST /api/v1/auth/login</code> pour obtenir un <b>JWT</b>. Collez-le ensuite dans le champ Auth en haut de la page (ex: <code>Bearer eyJ...</code>).'
security:
  -
    default: []
paths:
  /api/v1/subscription-plans:
    get:
      summary: "Liste les plans d'abonnement actifs (pour les propriétaires)\nGET /api/v1/subscription-plans"
      operationId: listeLesPlansDabonnementActifspourLesPropritairesGETapiv1subscriptionPlans
      description: ''
      parameters: []
      responses:
        200:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  success: true
                  data:
                    -
                      id: 1
                      slug: pro
                      name: Professionnel
                      monthly_price: 4500
                      formatted_price: 45.00$
                properties:
                  success:
                    type: boolean
                    example: true
                  data:
                    type: array
                    example:
                      -
                        id: 1
                        slug: pro
                        name: Professionnel
                        monthly_price: 4500
                        formatted_price: 45.00$
                    items:
                      type: object
                      properties:
                        id:
                          type: integer
                          example: 1
                        slug:
                          type: string
                          example: pro
                        name:
                          type: string
                          example: Professionnel
                        monthly_price:
                          type: integer
                          example: 4500
                        formatted_price:
                          type: string
                          example: 45.00$
      tags:
        - Abonnements
      security: []
    post:
      summary: "Crée un nouveau plan d'abonnement\nPOST /api/v1/subscription-plans"
      operationId: creUnNouveauPlanDabonnementPOSTapiv1subscriptionPlans
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                slug:
                  type: string
                  description: ''
                  example: consequatur
                name:
                  type: string
                  description: 'Must not be greater than 100 characters.'
                  example: mqeopfuudtdsufvyvddqa
                subtitle:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: mniihfqcoynlazghdtqtq
                  nullable: true
                base_price_monthly:
                  type: integer
                  description: 'Must be at least 0.'
                  example: 80
                commission_rate:
                  type: number
                  description: 'Must be at least 0. Must not be greater than 100.'
                  example: 2
                max_ota_channels:
                  type: integer
                  description: ''
                  example: 17
                max_properties:
                  type: integer
                  description: ''
                  example: 17
                features:
                  type: object
                  description: ''
                  example: null
                  properties: {  }
                feature_limits:
                  type: object
                  description: ''
                  example: null
                  properties: {  }
                display_order:
                  type: integer
                  description: 'Limites par feature: {feature_slug: limit_value}.'
                  example: 17
                is_active:
                  type: boolean
                  description: ''
                  example: false
                is_popular:
                  type: boolean
                  description: ''
                  example: true
              required:
                - slug
                - name
                - base_price_monthly
                - commission_rate
      security: []
  /api/v1/subscription-plans/calculate-price:
    post:
      summary: "Calcule le prix d'un plan selon le nombre de propriétés et la devise\nPOST /api/v1/subscription-plans/calculate-price"
      operationId: calculeLePrixDunPlanSelonLeNombreDePropritsEtLaDevisePOSTapiv1subscriptionPlanscalculatePrice
      description: ''
      parameters: []
      responses:
        200:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  success: true
                  data:
                    plan:
                      slug: pro
                      name: Professionnel
                    properties_count: 5
                    billing_period: monthly
                    currency: USD
                    monthly_price: 4500
                    total_price: 4500
                    savings: 0
                properties:
                  success:
                    type: boolean
                    example: true
                  data:
                    type: object
                    properties:
                      plan:
                        type: object
                        properties:
                          slug:
                            type: string
                            example: pro
                          name:
                            type: string
                            example: Professionnel
                      properties_count:
                        type: integer
                        example: 5
                      billing_period:
                        type: string
                        example: monthly
                      currency:
                        type: string
                        example: USD
                      monthly_price:
                        type: integer
                        example: 4500
                      total_price:
                        type: integer
                        example: 4500
                      savings:
                        type: integer
                        example: 0
      tags:
        - Abonnements
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                plan_slug:
                  type: string
                  description: 'Le slug du plan (pro, business, enterprise).'
                  example: pro
                properties_count:
                  type: integer
                  description: 'Nombre de propriétés.'
                  example: 5
                billing_period:
                  type: string
                  description: 'Période de facturation.'
                  example: monthly
                currency:
                  type: string
                  description: 'optional Devise (USD, EUR, XOF).'
                  example: USD
                  nullable: true
              required:
                - plan_slug
                - properties_count
                - billing_period
      security: []
  /api/v1/subscriptions/current:
    get:
      summary: "Récupère l'abonnement actuel de l'utilisateur\nGET /api/v1/subscriptions/current"
      operationId: rcupreLabonnementActuelDeLutilisateurGETapiv1subscriptionscurrent
      description: ''
      parameters: []
      responses:
        200:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  success: true
                  data:
                    has_subscription: true
                    subscription:
                      id: 1
                      status: active
                      billing_period: monthly
                      properties_count: 5
                      monthly_price: 4500
                      days_remaining: 25
                    plan:
                      slug: pro
                      name: Professionnel
                properties:
                  success:
                    type: boolean
                    example: true
                  data:
                    type: object
                    properties:
                      has_subscription:
                        type: boolean
                        example: true
                      subscription:
                        type: object
                        properties:
                          id:
                            type: integer
                            example: 1
                          status:
                            type: string
                            example: active
                          billing_period:
                            type: string
                            example: monthly
                          properties_count:
                            type: integer
                            example: 5
                          monthly_price:
                            type: integer
                            example: 4500
                          days_remaining:
                            type: integer
                            example: 25
                      plan:
                        type: object
                        properties:
                          slug:
                            type: string
                            example: pro
                          name:
                            type: string
                            example: Professionnel
      tags:
        - Abonnements
  '/api/v1/subscriptions/check-feature/{feature}':
    get:
      summary: "Vérifie si l'utilisateur a accès à une fonctionnalité\nGET /api/v1/subscriptions/check-feature/{feature}"
      operationId: vrifieSiLutilisateurAAccsUneFonctionnalitGETapiv1subscriptionscheckFeaturefeature
      description: ''
      parameters: []
      responses:
        200:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  success: true
                  data:
                    has_access: true
                    feature: crm_integration
                    plan: Professionnel
                properties:
                  success:
                    type: boolean
                    example: true
                  data:
                    type: object
                    properties:
                      has_access:
                        type: boolean
                        example: true
                      feature:
                        type: string
                        example: crm_integration
                      plan:
                        type: string
                        example: Professionnel
      tags:
        - Abonnements
    parameters:
      -
        in: path
        name: feature
        description: 'Code de la fonctionnalité.'
        example: crm_integration
        required: true
        schema:
          type: string
  /api/v1/subscriptions/checkout:
    post:
      summary: "Crée une session Stripe Checkout pour souscrire à un plan\nPOST /api/v1/subscriptions/checkout"
      operationId: creUneSessionStripeCheckoutPourSouscrireUnPlanPOSTapiv1subscriptionscheckout
      description: ''
      parameters: []
      responses:
        200:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  success: true
                  data:
                    checkout_url: 'https://checkout.stripe.com/...'
                    session_id: cs_test_...
                properties:
                  success:
                    type: boolean
                    example: true
                  data:
                    type: object
                    properties:
                      checkout_url:
                        type: string
                        example: 'https://checkout.stripe.com/...'
                      session_id:
                        type: string
                        example: cs_test_...
        400:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  success: false
                  message: 'Vous avez déjà un abonnement actif...'
                properties:
                  success:
                    type: boolean
                    example: false
                  message:
                    type: string
                    example: 'Vous avez déjà un abonnement actif...'
      tags:
        - Abonnements
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                plan_slug:
                  type: string
                  description: 'Le slug du plan.'
                  example: pro
                billing_period:
                  type: string
                  description: 'Période de facturation.'
                  example: monthly
                properties_count:
                  type: integer
                  description: 'Nombre de propriétés.'
                  example: 5
                currency:
                  type: string
                  description: 'optional Devise.'
                  example: USD
                  nullable: true
              required:
                - plan_slug
                - billing_period
                - properties_count
  /api/v1/subscriptions/cancel:
    post:
      summary: "Annule l'abonnement actuel\nPOST /api/v1/subscriptions/cancel"
      operationId: annuleLabonnementActuelPOSTapiv1subscriptionscancel
      description: ''
      parameters: []
      responses:
        200:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  success: true
                  message: "Abonnement annulé. Accès conservé jusqu'au 31/12/2024"
                  data:
                    end_date: '2024-12-31T23:59:59.000000Z'
                    days_remaining: 15
                properties:
                  success:
                    type: boolean
                    example: true
                  message:
                    type: string
                    example: "Abonnement annulé. Accès conservé jusqu'au 31/12/2024"
                  data:
                    type: object
                    properties:
                      end_date:
                        type: string
                        example: '2024-12-31T23:59:59.000000Z'
                      days_remaining:
                        type: integer
                        example: 15
        404:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  success: false
                  message: 'Aucun abonnement actif'
                properties:
                  success:
                    type: boolean
                    example: false
                  message:
                    type: string
                    example: 'Aucun abonnement actif'
      tags:
        - Abonnements
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                reason:
                  type: string
                  description: "optional Raison de l'annulation."
                  example: 'Changement de stratégie'
                  nullable: true
  /api/v1/subscriptions/invoices:
    get:
      summary: "Historique des factures\nGET /api/v1/subscriptions/invoices"
      operationId: historiqueDesFacturesGETapiv1subscriptionsinvoices
      description: ''
      parameters: []
      responses:
        200:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  success: true
                  data:
                    -
                      id: 1
                      invoice_number: INV-2024-00001
                      amount_formatted: '45.00 USD'
                      status: paid
                      period_start: '2024-01-01T00:00:00.000000Z'
                      plan_name: Professionnel
                properties:
                  success:
                    type: boolean
                    example: true
                  data:
                    type: array
                    example:
                      -
                        id: 1
                        invoice_number: INV-2024-00001
                        amount_formatted: '45.00 USD'
                        status: paid
                        period_start: '2024-01-01T00:00:00.000000Z'
                        plan_name: Professionnel
                    items:
                      type: object
                      properties:
                        id:
                          type: integer
                          example: 1
                        invoice_number:
                          type: string
                          example: INV-2024-00001
                        amount_formatted:
                          type: string
                          example: '45.00 USD'
                        status:
                          type: string
                          example: paid
                        period_start:
                          type: string
                          example: '2024-01-01T00:00:00.000000Z'
                        plan_name:
                          type: string
                          example: Professionnel
      tags:
        - Abonnements
  /api/v1/subscription-plans/admin:
    get:
      summary: "Liste tous les plans (actifs et inactifs) pour l'admin\nGET /api/v1/subscription-plans/admin"
      operationId: listeTousLesPlansactifsEtInactifsPourLadminGETapiv1subscriptionPlansadmin
      description: ''
      parameters: []
      responses:
        200:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  success: true
                  data:
                    -
                      id: 1
                      slug: pro
                      name: Professionnel
                      is_active: true
                      base_price_monthly: 4500
                properties:
                  success:
                    type: boolean
                    example: true
                  data:
                    type: array
                    example:
                      -
                        id: 1
                        slug: pro
                        name: Professionnel
                        is_active: true
                        base_price_monthly: 4500
                    items:
                      type: object
                      properties:
                        id:
                          type: integer
                          example: 1
                        slug:
                          type: string
                          example: pro
                        name:
                          type: string
                          example: Professionnel
                        is_active:
                          type: boolean
                          example: true
                        base_price_monthly:
                          type: integer
                          example: 4500
      tags:
        - 'Abonnements Admin'
  /api/v1/subscriptions/admin/all:
    get:
      summary: "Liste tous les abonnements (pour l'admin)\nGET /api/v1/subscriptions/admin/all"
      operationId: listeTousLesAbonnementspourLadminGETapiv1subscriptionsadminall
      description: ''
      parameters: []
      responses:
        200:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  success: true
                  data:
                    -
                      id: 1
                      user:
                        name: 'John Doe'
                      plan:
                        name: Professionnel
                      status: active
                      monthly_price: 4500
                properties:
                  success:
                    type: boolean
                    example: true
                  data:
                    type: array
                    example:
                      -
                        id: 1
                        user:
                          name: 'John Doe'
                        plan:
                          name: Professionnel
                        status: active
                        monthly_price: 4500
                    items:
                      type: object
                      properties:
                        id:
                          type: integer
                          example: 1
                        user:
                          type: object
                          properties:
                            name:
                              type: string
                              example: 'John Doe'
                        plan:
                          type: object
                          properties:
                            name:
                              type: string
                              example: Professionnel
                        status:
                          type: string
                          example: active
                        monthly_price:
                          type: integer
                          example: 4500
      tags:
        - 'Abonnements Admin'
  /api/v1/subscriptions/admin/statistics:
    get:
      summary: "Statistiques des abonnements pour les administrateurs\nGET /api/v1/subscriptions/admin/statistics"
      operationId: statistiquesDesAbonnementsPourLesAdministrateursGETapiv1subscriptionsadminstatistics
      description: ''
      parameters: []
      responses:
        200:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  success: true
                  data:
                    total_subscriptions: 150
                    active_subscriptions: 120
                    monthly_revenue: 5400.0
                    yearly_revenue: 64800.0
                    plans_distribution:
                      pro: 80
                      business: 35
                      enterprise: 5
                properties:
                  success:
                    type: boolean
                    example: true
                  data:
                    type: object
                    properties:
                      total_subscriptions:
                        type: integer
                        example: 150
                      active_subscriptions:
                        type: integer
                        example: 120
                      monthly_revenue:
                        type: number
                        example: 5400.0
                      yearly_revenue:
                        type: number
                        example: 64800.0
                      plans_distribution:
                        type: object
                        properties:
                          pro:
                            type: integer
                            example: 80
                          business:
                            type: integer
                            example: 35
                          enterprise:
                            type: integer
                            example: 5
      tags:
        - 'Abonnements Admin'
  /api/v1/auth/register:
    post:
      summary: "Mini description: Inscription d'un nouvel utilisateur avec upload d'avatar optionnel. Retourne le token JWT."
      operationId: miniDescriptionInscriptionDunNouvelUtilisateurAvecUploadDavatarOptionnelRetourneLeTokenJWT
      description: ''
      parameters: []
      responses:
        201:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  success: true
                  data:
                    user:
                      id: 1
                      username: john_doe
                      email: john@example.com
                    token: '<JWT>'
                  message: 'User created successfully. Please check your email to verify your account.'
                properties:
                  success:
                    type: boolean
                    example: true
                  data:
                    type: object
                    properties:
                      user:
                        type: object
                        properties:
                          id:
                            type: integer
                            example: 1
                          username:
                            type: string
                            example: john_doe
                          email:
                            type: string
                            example: john@example.com
                      token:
                        type: string
                        example: '<JWT>'
                  message:
                    type: string
                    example: 'User created successfully. Please check your email to verify your account.'
        400:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  success: false
                  message: 'Require fields error'
                  data:
                    email:
                      - 'The email has already been taken.'
                properties:
                  success:
                    type: boolean
                    example: false
                  message:
                    type: string
                    example: 'Require fields error'
                  data:
                    type: object
                    properties:
                      email:
                        type: array
                        example:
                          - 'The email has already been taken.'
                        items:
                          type: string
        500:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  success: false
                  message: 'Failed to create user'
                properties:
                  success:
                    type: boolean
                    example: false
                  message:
                    type: string
                    example: 'Failed to create user'
      tags:
        - Authentification
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                username:
                  type: string
                  description: "Nom d'utilisateur unique. Exemple: john_doe"
                  example: consequatur
                first_name:
                  type: string
                  description: 'Prénom. Exemple: John'
                  example: consequatur
                last_name:
                  type: string
                  description: 'Nom. Exemple: Doe'
                  example: consequatur
                job:
                  type: string
                  description: 'Métier. Exemple: Développeur'
                  example: consequatur
                location:
                  type: string
                  description: 'Localisation. Exemple: Paris, France'
                  example: consequatur
                country_id:
                  type: string
                  description: 'The <code>id</code> of an existing record in the countries table.'
                  example: consequatur
                phone:
                  type: string
                  description: 'Numéro de téléphone. Exemple: +33123456789'
                  example: consequatur
                email:
                  type: string
                  description: 'Email unique. Exemple: john@example.com'
                  example: qkunze@example.com
                password:
                  type: string
                  description: 'Min 6 caractères. Exemple: password123'
                  example: 'O[2UZ5ij-e/dl4m{o,'
                password_confirmation:
                  type: string
                  description: 'Confirmation du mot de passe. Exemple: password123'
                  example: consequatur
                avatar:
                  type: string
                  format: binary
                  description: 'Image de profil (jpeg/png/webp <= 5MB).'
              required:
                - username
                - first_name
                - last_name
                - country_id
                - email
                - password
                - password_confirmation
      security: []
  /api/v1/auth/login:
    post:
      summary: ''
      operationId: postApiV1AuthLogin
      description: ''
      parameters: []
      responses:
        201:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  success: true
                  data:
                    token: '<JWT>'
                    role: user
                    id: 1
                  message: 'User connected successfully'
                properties:
                  success:
                    type: boolean
                    example: true
                  data:
                    type: object
                    properties:
                      token:
                        type: string
                        example: '<JWT>'
                      role:
                        type: string
                        example: user
                      id:
                        type: integer
                        example: 1
                  message:
                    type: string
                    example: 'User connected successfully'
        400:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  success: false
                  message: 'Require fields error'
                  data:
                    login:
                      - 'The login field is required.'
                properties:
                  success:
                    type: boolean
                    example: false
                  message:
                    type: string
                    example: 'Require fields error'
                  data:
                    type: object
                    properties:
                      login:
                        type: array
                        example:
                          - 'The login field is required.'
                        items:
                          type: string
        401:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  success: false
                  message: Unauthorized
                  data: 'invalid credential'
                properties:
                  success:
                    type: boolean
                    example: false
                  message:
                    type: string
                    example: Unauthorized
                  data:
                    type: string
                    example: 'invalid credential'
        403:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  success: false
                  message: 'Veuillez vérifier votre email avant de vous connecter. Un email de vérification a été envoyé à votre adresse.'
                properties:
                  success:
                    type: boolean
                    example: false
                  message:
                    type: string
                    example: 'Veuillez vérifier votre email avant de vous connecter. Un email de vérification a été envoyé à votre adresse.'
        500:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  success: false
                  message: error
                properties:
                  success:
                    type: boolean
                    example: false
                  message:
                    type: string
                    example: error
      tags:
        - Authentification
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                login:
                  type: string
                  description: "Email ou téléphone de l'utilisateur. Exemple: user@example.com"
                  example: consequatur
                password:
                  type: string
                  description: 'Mot de passe. Exemple: mypassword'
                  example: 'O[2UZ5ij-e/dl4m{o,'
              required:
                - login
                - password
      security: []
  /api/v1/auth/refresh:
    post:
      summary: ''
      operationId: postApiV1AuthRefresh
      description: ''
      parameters: []
      responses:
        200:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  newToken: '<JWT>'
                properties:
                  newToken:
                    type: string
                    example: '<JWT>'
        401:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  error: 'Token has expired and can no longer be refreshed'
                properties:
                  error:
                    type: string
                    example: 'Token has expired and can no longer be refreshed'
        500:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  error: 'Failed to refresh token'
                properties:
                  error:
                    type: string
                    example: 'Failed to refresh token'
      tags:
        - Authentification
  /api/oauth2-callback:
    get:
      summary: 'Display Oauth2 callback pages.'
      operationId: displayOauth2CallbackPages
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/broadcasting/auth:
    post:
      summary: 'Authenticate the request for channel access.'
      operationId: authenticateTheRequestForChannelAccess
      description: "Gère l'authentification des channels privés avec JWT.\nGénère la signature Pusher/Reverb manuellement."
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  '/api/v1/reservations/change-status-reservation-by-proprio/{reservation_id}/{status}':
    get:
      summary: ''
      operationId: getApiV1ReservationsChangeStatusReservationByProprioReservation_idStatus
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: reservation_id
        description: 'The ID of the reservation.'
        example: consequatur
        required: true
        schema:
          type: string
      -
        in: path
        name: status
        description: ''
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/booking_canceled_to_guest_notification/{payment_id}':
    post:
      summary: ''
      operationId: postApiV1Booking_canceled_to_guest_notificationPayment_id
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: payment_id
        description: 'The ID of the payment.'
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/auth/verify-email:
    get:
      summary: ''
      operationId: getApiV1AuthVerifyEmail
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/auth/verify-owner-email:
    get:
      summary: "Vérification d'email spécifique pour les propriétaires (flux d'abonnement)\nRedirige vers la page de vérification propriétaire du frontend"
      operationId: vrificationDemailSpcifiquePourLesPropritairesfluxDabonnementRedirigeVersLaPageDeVrificationPropritaireDuFrontend
      description: 'GET /api/v1/auth/verify-owner-email?user_id=xxx&token=xxx&plan=pro&period=annual&props=5'
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/auth/resend-verification:
    post:
      summary: ''
      operationId: postApiV1AuthResendVerification
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/quotes/confirm:
    get:
      summary: ''
      operationId: getApiV1QuotesConfirm
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/quotes/payment/verify:
    get:
      summary: 'Vérifie le statut du paiement après redirection depuis Stripe'
      operationId: vrifieLeStatutDuPaiementAprsRedirectionDepuisStripe
      description: "Cette méthode est appelée par le frontend après que Stripe redirige\nl'utilisateur vers la page de succès avec le session_id"
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/stripe/webhook:
    post:
      summary: 'Gère les événements webhook envoyés par Stripe'
      operationId: greLesvnementsWebhookEnvoysParStripe
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  '/api/v1/new_message_from_traveler/{message_id}':
    post:
      summary: ''
      operationId: postApiV1New_message_from_travelerMessage_id
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: message_id
        description: 'The ID of the message.'
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/new_message_from_traveler_comment_notification/{comment_id}':
    post:
      summary: ''
      operationId: postApiV1New_message_from_traveler_comment_notificationComment_id
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: comment_id
        description: 'The ID of the comment.'
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/owner_message_to_traveler_notification/{message_id}/{sender_id}':
    post:
      summary: ''
      operationId: postApiV1Owner_message_to_traveler_notificationMessage_idSender_id
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: message_id
        description: 'The ID of the message.'
        example: consequatur
        required: true
        schema:
          type: string
      -
        in: path
        name: sender_id
        description: 'The ID of the sender.'
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/payment_status_notification/{payment_id}':
    post:
      summary: ''
      operationId: postApiV1Payment_status_notificationPayment_id
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: payment_id
        description: 'The ID of the payment.'
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/user:
    get:
      summary: ''
      operationId: getApiV1User
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/hi:
    get:
      summary: ''
      operationId: getApiV1Hi
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/properties/public:
    get:
      summary: ''
      operationId: getApiV1PropertiesPublic
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/properties/popular:
    get:
      summary: ''
      operationId: getApiV1PropertiesPopular
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/properties/search:
    get:
      summary: ''
      operationId: getApiV1PropertiesSearch
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/properties/filter:
    get:
      summary: "Recherche de propriétés avec filtres avancés\nGET /api/v1/properties/search"
      operationId: rechercheDePropritsAvecFiltresAvancsGETapiv1propertiessearch
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  '/api/v1/properties/{id}/favorite':
    post:
      summary: ''
      operationId: postApiV1PropertiesIdFavorite
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the property.'
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/properties/get/favorites:
    get:
      summary: ''
      operationId: getApiV1PropertiesGetFavorites
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/properties/favorites/search:
    get:
      summary: ''
      operationId: getApiV1PropertiesFavoritesSearch
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  '/api/v1/properties/{propertyId}/active-offers':
    get:
      summary: ''
      operationId: getApiV1PropertiesPropertyIdActiveOffers
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: propertyId
        description: ''
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/properties/{propertyId}/active-packages':
    get:
      summary: ''
      operationId: getApiV1PropertiesPropertyIdActivePackages
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: propertyId
        description: ''
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/properties/{propertyId}/active-seasons':
    get:
      summary: ''
      operationId: getApiV1PropertiesPropertyIdActiveSeasons
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: propertyId
        description: ''
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/properties/{propertyId}/active-services':
    get:
      summary: ''
      operationId: getApiV1PropertiesPropertyIdActiveServices
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: propertyId
        description: ''
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/property/types:
    get:
      summary: ''
      operationId: getApiV1PropertyTypes
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/reservations/preview:
    post:
      summary: ''
      operationId: postApiV1ReservationsPreview
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                property_id:
                  type: string
                  description: 'The <code>id</code> of an existing record in the properties table.'
                  example: consequatur
                checkin_date:
                  type: string
                  description: 'Must be a valid date.'
                  example: '2026-02-03T17:41:12'
                checkout_date:
                  type: string
                  description: 'Must be a valid date. Must be a date after <code>checkin_date</code>.'
                  example: '2107-03-05'
                promo_code:
                  type: string
                  description: 'The <code>code</code> of an existing record in the code_promos table.'
                  example: consequatur
                  nullable: true
                guests:
                  type: object
                  description: ''
                  example: null
                  properties: {  }
                  nullable: true
                services:
                  type: object
                  description: ''
                  example: null
                  properties: {  }
                  nullable: true
                service_ids:
                  type: array
                  description: 'The <code>id</code> of an existing record in the services table.'
                  example:
                    - 17
                  items:
                    type: integer
                rooms_count:
                  type: integer
                  description: 'Must be at least 1.'
                  example: 45
                  nullable: true
                rooms:
                  type: array
                  description: 'Support Channex rooms.'
                  example: null
                  items:
                    type: object
                    nullable: true
                    properties:
                      room_type_id:
                        type: string
                        description: 'The <code>id</code> of an existing record in the channex_room_types table.'
                        example: null
                        nullable: true
                      rate_plan_id:
                        type: string
                        description: 'The <code>id</code> of an existing record in the channex_rate_plans table.'
                        example: null
                        nullable: true
                      rooms_count:
                        type: integer
                        description: 'Must be at least 1.'
                        example: 45
                        nullable: true
                offer_id:
                  type: integer
                  description: 'Offres et Packages. The <code>id</code> of an existing record in the offers table.'
                  example: 17
                  nullable: true
                package_ids:
                  type: array
                  description: 'The <code>id</code> of an existing record in the packages table.'
                  example:
                    - 17
                  items:
                    type: integer
              required:
                - property_id
                - checkin_date
                - checkout_date
      security: []
  /api/v1/auth/register-owner:
    post:
      summary: ''
      operationId: postApiV1AuthRegisterOwner
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                first_name:
                  type: string
                  description: 'Informations de base (comme register). Must not be greater than 100 characters.'
                  example: vmqeopfuudtdsufvyvddq
                last_name:
                  type: string
                  description: 'Must not be greater than 100 characters.'
                  example: amniihfqcoynlazghdtqt
                email:
                  type: string
                  description: 'Must be a valid email address.'
                  example: andreanne00@example.org
                phone:
                  type: string
                  description: ''
                  example: consequatur
                  nullable: true
                country_id:
                  type: string
                  description: 'The <code>id</code> of an existing record in the countries table.'
                  example: consequatur
                password:
                  type: string
                  description: 'Must be at least 6 characters.'
                  example: '[2UZ5ij-e/dl4'
                password_confirmation:
                  type: string
                  description: 'Must be at least 6 characters.'
                  example: vyvddqamniihfqcoynlazghdtqtqxbajwbpilpmufinllwloauydlsmsjuryvojcybzvrbyick
                user_type:
                  type: string
                  description: 'Informations propriétaire (comme becomeOwner).'
                  example: company
                  enum:
                    - individual
                    - company
                country_region:
                  type: string
                  description: ''
                  example: consequatur
                id_type:
                  type: string
                  description: ''
                  example: identity_card
                  enum:
                    - identity_card
                    - passport
                    - driver_licence
                id_number:
                  type: string
                  description: ''
                  example: consequatur
                id_expiry_date:
                  type: string
                  description: 'Must be a valid date.'
                  example: '2026-02-03T17:41:12'
                id_reco_path:
                  type: string
                  description: 'Must not be greater than 2048 characters.'
                  example: mqeopfuudtdsufvyvddqa
                id_verso_path:
                  type: string
                  description: 'Must not be greater than 2048 characters.'
                  example: mniihfqcoynlazghdtqtq
                  nullable: true
                place_type:
                  type: string
                  description: ''
                  example: other
                  enum:
                    - house
                    - apartment
                    - hotel
                    - other
                  nullable: true
                place_details:
                  type: string
                  description: ''
                  example: consequatur
                address:
                  type: string
                  description: ''
                  example: consequatur
                city:
                  type: string
                  description: ''
                  example: consequatur
                state:
                  type: string
                  description: ''
                  example: consequatur
                postal_code:
                  type: string
                  description: ''
                  example: consequatur
                country:
                  type: string
                  description: ''
                  example: consequatur
                latitude:
                  type: number
                  description: ''
                  example: 11613.31890586
                longitude:
                  type: number
                  description: ''
                  example: 11613.31890586
                plan_slug:
                  type: string
                  description: 'Paramètres du plan (optionnels, pour la redirection après vérification).'
                  example: free
                  enum:
                    - free
                    - pro
                    - business
                    - enterprise
                  nullable: true
                billing_period:
                  type: string
                  description: ''
                  example: annual
                  enum:
                    - monthly
                    - annual
                    - 2years
                  nullable: true
                properties_count:
                  type: integer
                  description: 'Must be at least 1.'
                  example: 51
                  nullable: true
              required:
                - first_name
                - last_name
                - email
                - country_id
                - password
                - password_confirmation
                - user_type
                - country_region
                - id_type
                - id_number
                - id_expiry_date
                - id_reco_path
                - place_details
                - address
                - city
                - state
                - postal_code
                - country
                - latitude
                - longitude
      security: []
  /api/v1/auth/logout:
    post:
      summary: ''
      operationId: postApiV1AuthLogout
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/auth/google:
    get:
      summary: ''
      operationId: getApiV1AuthGoogle
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/auth/google/callback:
    get:
      summary: ''
      operationId: getApiV1AuthGoogleCallback
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/auth/facebook:
    get:
      summary: ''
      operationId: getApiV1AuthFacebook
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/auth/facebook/callback:
    get:
      summary: ''
      operationId: getApiV1AuthFacebookCallback
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/password_reset/verify_email:
    post:
      summary: ''
      operationId: postApiV1Password_resetVerify_email
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/password_reset/verify_code_dended:
    post:
      summary: ''
      operationId: postApiV1Password_resetVerify_code_dended
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/password_reset/reset_old_password:
    post:
      summary: ''
      operationId: postApiV1Password_resetReset_old_password
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/policies/index:
    get:
      summary: ''
      operationId: getApiV1PoliciesIndex
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  '/api/v1/policies/show_policy_by_id/{policy_id}':
    get:
      summary: ''
      operationId: getApiV1PoliciesShow_policy_by_idPolicy_id
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: policy_id
        description: 'The ID of the policy.'
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/policies/store:
    post:
      summary: ''
      operationId: postApiV1PoliciesStore
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  '/api/v1/policies/update/{policy_id}':
    post:
      summary: ''
      operationId: postApiV1PoliciesUpdatePolicy_id
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: policy_id
        description: 'The ID of the policy.'
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/policies/delete/{policy_id}':
    delete:
      summary: ''
      operationId: deleteApiV1PoliciesDeletePolicy_id
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: policy_id
        description: 'The ID of the policy.'
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/policies/type/{type}':
    get:
      summary: ''
      operationId: getApiV1PoliciesTypeType
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: type
        description: 'The type.'
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/user/policies/unaccepted:
    get:
      summary: ''
      operationId: getApiV1UserPoliciesUnaccepted
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  '/api/v1/user/policies/check/{type}':
    get:
      summary: ''
      operationId: getApiV1UserPoliciesCheckType
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: type
        description: ''
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/user/policies/accept/{policyId}':
    post:
      summary: ''
      operationId: postApiV1UserPoliciesAcceptPolicyId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: policyId
        description: ''
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/seasons-test:
    get:
      summary: ''
      operationId: getApiV1SeasonsTest
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    post:
      summary: ''
      operationId: postApiV1SeasonsTest
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                season_libelle:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: vmqeopfuudtdsufvyvddq
                season_description:
                  type: string
                  description: ''
                  example: consequatur
                  nullable: true
                season_start_date:
                  type: string
                  description: 'Must be a valid date. Must be a date before or equal to <code>season_end_date</code>.'
                  example: '2020-05-31'
                season_end_date:
                  type: string
                  description: 'Must be a valid date. Must be a date after or equal to <code>season_start_date</code>.'
                  example: '2107-03-05'
                season_reduction_percent:
                  type: number
                  description: 'Must be between 0 and 100.'
                  example: 0
                season_min_stay:
                  type: integer
                  description: 'Must be at least 1.'
                  example: 56
                  nullable: true
                season_max_stay:
                  type: integer
                  description: 'Must be at least 1.'
                  example: 17
                  nullable: true
                season_reduction_policy:
                  type: string
                  description: ''
                  example: none
                  enum:
                    - booking
                    - nights
                    - total
                    - weekly
                    - none
                  nullable: true
                property_id:
                  type: string
                  description: 'The <code>id</code> of an existing record in the properties table.'
                  example: consequatur
              required:
                - season_libelle
                - season_start_date
                - season_end_date
                - season_reduction_percent
                - property_id
      security: []
  '/api/v1/seasons-test/{id}':
    get:
      summary: ''
      operationId: getApiV1SeasonsTestId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    put:
      summary: ''
      operationId: putApiV1SeasonsTestId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                season_libelle:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: vmqeopfuudtdsufvyvddq
                season_description:
                  type: string
                  description: ''
                  example: consequatur
                  nullable: true
                season_start_date:
                  type: string
                  description: 'Must be a valid date. Must be a date before or equal to <code>season_end_date</code>.'
                  example: '2020-05-31'
                season_end_date:
                  type: string
                  description: 'Must be a valid date. Must be a date after or equal to <code>season_start_date</code>.'
                  example: '2107-03-05'
                season_reduction_percent:
                  type: number
                  description: 'Must be between 0 and 100.'
                  example: 0
                season_min_stay:
                  type: integer
                  description: 'Must be at least 1.'
                  example: 56
                season_max_stay:
                  type: integer
                  description: 'Must be at least 1.'
                  example: 17
                season_reduction_policy:
                  type: string
                  description: ''
                  example: weekly
                  enum:
                    - booking
                    - nights
                    - total
                    - weekly
                    - none
                  nullable: true
                season_status:
                  type: string
                  description: ''
                  example: active
                  enum:
                    - active
                    - inactive
                property_id:
                  type: string
                  description: 'The <code>id</code> of an existing record in the properties table.'
                  example: null
      security: []
    delete:
      summary: ''
      operationId: deleteApiV1SeasonsTestId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the seasons test.'
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/webhook/notifications:
    post:
      summary: ''
      operationId: postApiV1WebhookNotifications
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/get-countries:
    get:
      summary: ''
      operationId: getApiV1GetCountries
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  '/api/v1/get-cities/{country_id}':
    get:
      summary: ''
      operationId: getApiV1GetCitiesCountry_id
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: country_id
        description: 'The ID of the country.'
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/get-neighborhoods/{city_id}':
    get:
      summary: ''
      operationId: getApiV1GetNeighborhoodsCity_id
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: city_id
        description: 'The ID of the city.'
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/calendars/properties/{property_id}/availability':
    get:
      summary: "Retourne le calendrier journalier d'une propriété entre deux dates."
      operationId: retourneLeCalendrierJournalierDunePropritEntreDeuxDates
      description: 'GET /api/v1/calendar/properties/{property_id}/availability?from=YYYY-MM-DD&to=YYYY-MM-DD'
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                from:
                  type: string
                  description: 'Must be a valid date in the format <code>Y-m-d</code>.'
                  example: '2026-02-03'
                  nullable: true
                to:
                  type: string
                  description: 'Must be a valid date in the format <code>Y-m-d</code>.'
                  example: '2026-02-03'
                  nullable: true
      security: []
    parameters:
      -
        in: path
        name: property_id
        description: 'The ID of the property.'
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/calendars/properties/{property_id}/bulk':
    post:
      summary: "Opérations en masse sur le calendrier d'une propriété."
      operationId: oprationsEnMasseSurLeCalendrierDuneProprit
      description: "POST /api/v1/calendar/properties/{property_id}/bulk\nbody: { action: block|unblock|set_price, start_date, end_date, reason?, price_per_night? }"
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                action:
                  type: string
                  description: ''
                  example: block
                  enum:
                    - block
                    - unblock
                    - set_price
                start_date:
                  type: string
                  description: 'Must be a valid date in the format <code>Y-m-d</code>.'
                  example: '2026-02-03'
                end_date:
                  type: string
                  description: 'Must be a valid date in the format <code>Y-m-d</code>.'
                  example: '2026-02-03'
                reason:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: vmqeopfuudtdsufvyvddq
                  nullable: true
                price_per_night:
                  type: number
                  description: 'Must be at least 0.'
                  example: 1
                  nullable: true
                cleaning_fee:
                  type: number
                  description: 'Must be at least 0.'
                  example: 45
                  nullable: true
                extra_guest_fee:
                  type: number
                  description: 'Must be at least 0.'
                  example: 46
                  nullable: true
              required:
                - action
                - start_date
                - end_date
      security: []
    parameters:
      -
        in: path
        name: property_id
        description: 'The ID of the property.'
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/calendars/properties/{property_id}/close':
    post:
      summary: 'Créer une fermeture de dates (non réservable) pour une propriété.'
      operationId: crerUneFermetureDeDatesnonRservablePourUneProprit
      description: "POST /api/v1/calendar/properties/{property_id}/close\nbody: { start_date: Y-m-d, end_date: Y-m-d, reason?: string }\nRègle: on refuse si la période chevauche une réservation EXISTANTE quel que soit le statut (pending, inquiry, confirmed, etc.)."
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                start_date:
                  type: string
                  description: 'Must be a valid date in the format <code>Y-m-d</code>.'
                  example: '2026-02-03'
                end_date:
                  type: string
                  description: 'Must be a valid date in the format <code>Y-m-d</code>.'
                  example: '2026-02-03'
                reason:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: vmqeopfuudtdsufvyvddq
                  nullable: true
              required:
                - start_date
                - end_date
      security: []
    delete:
      summary: 'Supprimer toutes les fermetures qui chevauchent une plage.'
      operationId: supprimerToutesLesFermeturesQuiChevauchentUnePlage
      description: 'DELETE /api/v1/calendar/properties/{property_id}/close?from=YYYY-MM-DD&to=YYYY-MM-DD'
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                from:
                  type: string
                  description: 'Must be a valid date in the format <code>Y-m-d</code>.'
                  example: '2026-02-03'
                to:
                  type: string
                  description: 'Must be a valid date in the format <code>Y-m-d</code>.'
                  example: '2026-02-03'
              required:
                - from
                - to
      security: []
    parameters:
      -
        in: path
        name: property_id
        description: 'The ID of the property.'
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/calendars/properties/{property_id}/close/{block_id}':
    delete:
      summary: 'Supprimer une fermeture précise par ID.'
      operationId: supprimerUneFermeturePrciseParID
      description: 'DELETE /api/v1/calendar/properties/{property_id}/close/{block_id}'
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: property_id
        description: 'The ID of the property.'
        example: consequatur
        required: true
        schema:
          type: string
      -
        in: path
        name: block_id
        description: 'The ID of the block.'
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/webhook/notifications-list:
    get:
      summary: ''
      operationId: getApiV1WebhookNotificationsList
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/webhook/list:
    get:
      summary: ''
      operationId: getApiV1WebhookList
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  '/api/v1/webhook/{propertyUuid}/show':
    get:
      summary: ''
      operationId: getApiV1WebhookPropertyUuidShow
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: propertyUuid
        description: ''
        example: 66529e01-d113-3473-8d6f-9e11e09332ea
        required: true
        schema:
          type: string
  '/api/v1/webhook/{propertyUuid}/create':
    post:
      summary: ''
      operationId: postApiV1WebhookPropertyUuidCreate
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: propertyUuid
        description: ''
        example: 66529e01-d113-3473-8d6f-9e11e09332ea
        required: true
        schema:
          type: string
  '/api/v1/webhook/{propertyUuid}/create-test':
    post:
      summary: ''
      operationId: postApiV1WebhookPropertyUuidCreateTest
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: propertyUuid
        description: ''
        example: 66529e01-d113-3473-8d6f-9e11e09332ea
        required: true
        schema:
          type: string
  '/api/v1/webhook/{webhookUuid}/{propertyUuid}/update':
    put:
      summary: ''
      operationId: putApiV1WebhookWebhookUuidPropertyUuidUpdate
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: webhookUuid
        description: ''
        example: 66529e01-d113-3473-8d6f-9e11e09332ea
        required: true
        schema:
          type: string
      -
        in: path
        name: propertyUuid
        description: ''
        example: 66529e01-d113-3473-8d6f-9e11e09332ea
        required: true
        schema:
          type: string
  '/api/v1/webhook/{webhookUuid}/delete':
    delete:
      summary: ''
      operationId: deleteApiV1WebhookWebhookUuidDelete
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: webhookUuid
        description: ''
        example: 66529e01-d113-3473-8d6f-9e11e09332ea
        required: true
        schema:
          type: string
  /api/v1/room-types:
    get:
      summary: ''
      operationId: getApiV1RoomTypes
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    post:
      summary: ''
      operationId: postApiV1RoomTypes
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: ''
                  example: consequatur
                description:
                  type: string
                  description: ''
                  example: 'Dolores dolorum amet iste laborum eius est dolor.'
              required:
                - name
      security: []
  '/api/v1/room-types/{id}':
    get:
      summary: ''
      operationId: getApiV1RoomTypesId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    put:
      summary: ''
      operationId: putApiV1RoomTypesId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: ''
                  example: consequatur
                description:
                  type: string
                  description: ''
                  example: 'Dolores dolorum amet iste laborum eius est dolor.'
      security: []
    delete:
      summary: ''
      operationId: deleteApiV1RoomTypesId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the room type.'
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/property-information-templates:
    get:
      summary: ''
      operationId: getApiV1PropertyInformationTemplates
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    post:
      summary: ''
      operationId: postApiV1PropertyInformationTemplates
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  '/api/v1/property-information-templates/{id}':
    get:
      summary: ''
      operationId: getApiV1PropertyInformationTemplatesId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    put:
      summary: ''
      operationId: putApiV1PropertyInformationTemplatesId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    delete:
      summary: ''
      operationId: deleteApiV1PropertyInformationTemplatesId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the property information template.'
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/property-information-templates/categories:
    get:
      summary: ''
      operationId: getApiV1PropertyInformationTemplatesCategories
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/users:
    get:
      summary: ''
      operationId: getApiV1Users
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    post:
      summary: ''
      operationId: postApiV1Users
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                username:
                  type: string
                  description: ''
                  example: consequatur
                first_name:
                  type: string
                  description: ''
                  example: consequatur
                last_name:
                  type: string
                  description: ''
                  example: consequatur
                job:
                  type: string
                  description: ''
                  example: consequatur
                location:
                  type: string
                  description: ''
                  example: consequatur
                phone:
                  type: string
                  description: ''
                  example: consequatur
                email:
                  type: string
                  description: ''
                  example: qkunze@example.com
                avatar:
                  type: string
                  description: ''
                  example: consequatur
                password:
                  type: string
                  description: 'Must be at least 6 characters.'
                  example: '[2UZ5ij-e/dl4'
                password_confirmation:
                  type: string
                  description: 'Must be at least 6 characters.'
                  example: vyvddqamniihfqcoynlazghdtqtqxbajwbpilpmufinllwloauydlsmsjuryvojcybzvrbyick
              required:
                - username
                - first_name
                - last_name
                - email
                - password
                - password_confirmation
      security: []
  '/api/v1/users/{id}':
    get:
      summary: ''
      operationId: getApiV1UsersId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    put:
      summary: ''
      operationId: putApiV1UsersId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                username:
                  type: string
                  description: ''
                  example: consequatur
                first_name:
                  type: string
                  description: ''
                  example: consequatur
                last_name:
                  type: string
                  description: ''
                  example: consequatur
                job:
                  type: string
                  description: ''
                  example: consequatur
                location:
                  type: string
                  description: ''
                  example: consequatur
                phone:
                  type: string
                  description: ''
                  example: consequatur
                email:
                  type: string
                  description: ''
                  example: qkunze@example.com
                avatar:
                  type: string
                  description: ''
                  example: consequatur
                password:
                  type: string
                  description: 'Must be at least 6 characters.'
                  example: '[2UZ5ij-e/dl4'
                password_confirmation:
                  type: string
                  description: 'Must be at least 6 characters.'
                  example: vyvddqamniihfqcoynlazghdtqtqxbajwbpilpmufinllwloauydlsmsjuryvojcybzvrbyick
              required:
                - username
                - first_name
                - last_name
                - email
                - password
                - password_confirmation
      security: []
    delete:
      summary: ''
      operationId: deleteApiV1UsersId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the user.'
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/owner/assigned-users:
    get:
      summary: ''
      operationId: getApiV1OwnerAssignedUsers
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/assigned-users/create-and-assign:
    post:
      summary: ''
      operationId: postApiV1AssignedUsersCreateAndAssign
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                username:
                  type: string
                  description: ''
                  example: consequatur
                first_name:
                  type: string
                  description: ''
                  example: consequatur
                last_name:
                  type: string
                  description: ''
                  example: consequatur
                email:
                  type: string
                  description: 'Must be a valid email address.'
                  example: carolyne.luettgen@example.org
                phone:
                  type: string
                  description: 'Must not be greater than 20 characters.'
                  example: fuudtdsufvyvddqam
                role:
                  type: string
                  description: ''
                  example: consequatur
                properties:
                  type: array
                  description: 'The <code>id</code> of an existing record in the properties table.'
                  example: null
                  items:
                    type: string
              required:
                - username
                - first_name
                - last_name
                - email
                - phone
                - role
      security: []
  /api/v1/assigned-users:
    get:
      summary: ''
      operationId: getApiV1AssignedUsers
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    post:
      summary: ''
      operationId: postApiV1AssignedUsers
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: ''
                  example: consequatur
                description:
                  type: string
                  description: ''
                  example: 'Dolores dolorum amet iste laborum eius est dolor.'
              required:
                - name
      security: []
  '/api/v1/assigned-users/{id}':
    get:
      summary: ''
      operationId: getApiV1AssignedUsersId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    put:
      summary: ''
      operationId: putApiV1AssignedUsersId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                username:
                  type: string
                  description: ''
                  example: null
                first_name:
                  type: string
                  description: ''
                  example: consequatur
                last_name:
                  type: string
                  description: ''
                  example: consequatur
                email:
                  type: string
                  description: ''
                  example: null
                phone:
                  type: string
                  description: ''
                  example: null
                role:
                  type: string
                  description: ''
                  example: consequatur
                properties:
                  type: array
                  description: 'The <code>id</code> of an existing record in the properties table.'
                  example: null
                  items:
                    type: string
      security: []
    delete:
      summary: ''
      operationId: deleteApiV1AssignedUsersId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the assigned user.'
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/space-types:
    get:
      summary: ''
      operationId: getApiV1SpaceTypes
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    post:
      summary: ''
      operationId: postApiV1SpaceTypes
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: ''
                  example: consequatur
                description:
                  type: string
                  description: ''
                  example: 'Dolores dolorum amet iste laborum eius est dolor.'
              required:
                - name
      security: []
  '/api/v1/space-types/{id}':
    get:
      summary: ''
      operationId: getApiV1SpaceTypesId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    put:
      summary: ''
      operationId: putApiV1SpaceTypesId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: ''
                  example: consequatur
                description:
                  type: string
                  description: ''
                  example: 'Dolores dolorum amet iste laborum eius est dolor.'
      security: []
    delete:
      summary: ''
      operationId: deleteApiV1SpaceTypesId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the space type.'
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/conveniences-types:
    get:
      summary: ''
      operationId: getApiV1ConveniencesTypes
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    post:
      summary: ''
      operationId: postApiV1ConveniencesTypes
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: ''
                  example: consequatur
                description:
                  type: string
                  description: ''
                  example: 'Dolores dolorum amet iste laborum eius est dolor.'
              required:
                - name
      security: []
  '/api/v1/conveniences-types/{id}':
    get:
      summary: ''
      operationId: getApiV1ConveniencesTypesId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    put:
      summary: ''
      operationId: putApiV1ConveniencesTypesId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: ''
                  example: consequatur
                description:
                  type: string
                  description: ''
                  example: 'Dolores dolorum amet iste laborum eius est dolor.'
      security: []
    delete:
      summary: ''
      operationId: deleteApiV1ConveniencesTypesId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the conveniences type.'
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/channels:
    get:
      summary: ''
      operationId: getApiV1Channels
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    post:
      summary: ''
      operationId: postApiV1Channels
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: ''
                  example: consequatur
                ota_code:
                  type: string
                  description: ''
                  example: WBK
                  enum:
                    - ABB
                    - ACO
                    - ADO
                    - AGO
                    - BDC
                    - CTZ
                    - DDC
                    - OVK
                    - EXP
                    - FER
                    - GDS
                    - GHA
                    - GIT
                    - HBD
                    - HG
                    - HIC
                    - HRS
                    - HWL
                    - LO
                    - MMB
                    - OC
                    - OSA
                    - RC
                    - RSR
                    - TSQ
                    - VB
                    - VRB
                    - WBK
                    - WBR
                description:
                  type: string
                  description: ''
                  example: 'Dolores dolorum amet iste laborum eius est dolor.'
                icon:
                  type: string
                  format: binary
                  description: 'Must be an image. Must not be greater than 5120 kilobytes.'
                picture:
                  type: string
                  format: binary
                  description: 'Must be an image. Must not be greater than 5120 kilobytes.'
              required:
                - name
                - ota_code
      security: []
  /api/v1/guest-types:
    get:
      summary: ''
      operationId: getApiV1GuestTypes
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    post:
      summary: ''
      operationId: postApiV1GuestTypes
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: ''
                  example: consequatur
                description:
                  type: string
                  description: ''
                  example: 'Dolores dolorum amet iste laborum eius est dolor.'
              required:
                - name
      security: []
  '/api/v1/guest-types/{id}':
    get:
      summary: ''
      operationId: getApiV1GuestTypesId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    put:
      summary: ''
      operationId: putApiV1GuestTypesId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: ''
                  example: consequatur
                description:
                  type: string
                  description: ''
                  example: 'Dolores dolorum amet iste laborum eius est dolor.'
      security: []
    delete:
      summary: ''
      operationId: deleteApiV1GuestTypesId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the guest type.'
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/contract-types:
    get:
      summary: ''
      operationId: getApiV1ContractTypes
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    post:
      summary: ''
      operationId: postApiV1ContractTypes
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: ''
                  example: consequatur
                description:
                  type: string
                  description: ''
                  example: 'Dolores dolorum amet iste laborum eius est dolor.'
              required:
                - name
      security: []
  '/api/v1/contract-types/{id}':
    get:
      summary: ''
      operationId: getApiV1ContractTypesId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    put:
      summary: ''
      operationId: putApiV1ContractTypesId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: ''
                  example: consequatur
                description:
                  type: string
                  description: ''
                  example: 'Dolores dolorum amet iste laborum eius est dolor.'
      security: []
    delete:
      summary: ''
      operationId: deleteApiV1ContractTypesId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the contract type.'
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/refund-policies/match:
    get:
      summary: "Match automatique d'une politique selon critères."
      operationId: matchAutomatiqueDunePolitiqueSelonCritres
      description: 'GET /api/refund-policies/match?user_id=...&accommodation_type=...&stay_nights=...'
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                user_id:
                  type: integer
                  description: ''
                  example: 17
                  nullable: true
                accommodation_type:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: mqeopfuudtdsufvyvddqa
                  nullable: true
                stay_nights:
                  type: integer
                  description: 'Must be at least 1.'
                  example: 45
                  nullable: true
      security: []
  /api/v1/refund-policies:
    get:
      summary: ''
      operationId: getApiV1RefundPolicies
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    post:
      summary: ''
      operationId: postApiV1RefundPolicies
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                type:
                  type: string
                  description: ''
                  example: force_majeure
                  enum:
                    - flexible
                    - semi_flexible
                    - moderee
                    - stricte
                    - force_majeure
                description:
                  type: string
                  description: ''
                  example: 'Dolores dolorum amet iste laborum eius est dolor.'
                  nullable: true
                deadline_hours:
                  type: integer
                  description: 'Must be at least 0.'
                  example: 12
                  nullable: true
                deadline_days:
                  type: integer
                  description: 'Must be at least 0.'
                  example: 66
                  nullable: true
                refund_percentage:
                  type: integer
                  description: 'Must be at least 0. Must not be greater than 100.'
                  example: 4
                refundable_after_deadline:
                  type: boolean
                  description: ''
                  example: true
                requires_proof:
                  type: boolean
                  description: ''
                  example: false
                accepted_force_majeure_reasons:
                  type: array
                  description: ''
                  example:
                    - consequatur
                  items:
                    type: string
                additional_rules:
                  type: object
                  description: ''
                  example: null
                  properties: {  }
                  nullable: true
                host_id:
                  type: integer
                  description: ''
                  example: 17
                  nullable: true
                accommodation_type:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: mqeopfuudtdsufvyvddqa
                  nullable: true
                min_nights:
                  type: integer
                  description: 'Must be at least 1.'
                  example: 45
                  nullable: true
                max_nights:
                  type: integer
                  description: 'Must be at least 1.'
                  example: 46
                  nullable: true
                is_default:
                  type: boolean
                  description: ''
                  example: false
              required:
                - type
                - refund_percentage
      security: []
  '/api/v1/refund-policies/{id}':
    get:
      summary: ''
      operationId: getApiV1RefundPoliciesId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    put:
      summary: ''
      operationId: putApiV1RefundPoliciesId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                type:
                  type: string
                  description: ''
                  example: semi_flexible
                  enum:
                    - flexible
                    - semi_flexible
                    - moderee
                    - stricte
                    - force_majeure
                description:
                  type: string
                  description: ''
                  example: 'Dolores dolorum amet iste laborum eius est dolor.'
                  nullable: true
                deadline_hours:
                  type: integer
                  description: 'Must be at least 0.'
                  example: 12
                  nullable: true
                deadline_days:
                  type: integer
                  description: 'Must be at least 0.'
                  example: 66
                  nullable: true
                refund_percentage:
                  type: integer
                  description: 'Must be at least 0. Must not be greater than 100.'
                  example: 4
                refundable_after_deadline:
                  type: boolean
                  description: ''
                  example: false
                requires_proof:
                  type: boolean
                  description: ''
                  example: true
                accepted_force_majeure_reasons:
                  type: array
                  description: ''
                  example:
                    - consequatur
                  items:
                    type: string
                additional_rules:
                  type: object
                  description: ''
                  example: null
                  properties: {  }
                  nullable: true
                host_id:
                  type: integer
                  description: ''
                  example: 17
                  nullable: true
                accommodation_type:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: mqeopfuudtdsufvyvddqa
                  nullable: true
                min_nights:
                  type: integer
                  description: 'Must be at least 1.'
                  example: 45
                  nullable: true
                max_nights:
                  type: integer
                  description: 'Must be at least 1.'
                  example: 46
                  nullable: true
                is_default:
                  type: boolean
                  description: ''
                  example: false
      security: []
    delete:
      summary: ''
      operationId: deleteApiV1RefundPoliciesId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the refund policy.'
        example: 1
        required: true
        schema:
          type: integer
  '/api/v1/reservations/{reservation_id}/cancellation-justification':
    post:
      summary: 'Soumission du justificatif par l’hôte (≤ 24h)'
      operationId: soumissionDuJustificatifParLhte24h
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                reason_type:
                  type: string
                  description: ''
                  example: security_issue
                  enum:
                    - force_majeure
                    - security_issue
                    - non_conformite_logement
                    - fraud_guest
                    - other
                description:
                  type: string
                  description: ''
                  example: 'Dolores dolorum amet iste laborum eius est dolor.'
                  nullable: true
                document:
                  type: string
                  format: binary
                  description: 'Must be a file. Must not be greater than 5120 kilobytes.'
              required:
                - reason_type
                - document
      security: []
    parameters:
      -
        in: path
        name: reservation_id
        description: 'The ID of the reservation.'
        example: 2
        required: true
        schema:
          type: integer
  /api/v1/admin/cancellation-justifications:
    post:
      summary: 'Validation / rejet par IMOBIZNETS (admin)'
      operationId: validationRejetParIMOBIZNETSadmin
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                status:
                  type: string
                  description: ''
                  example: approved
                  enum:
                    - approved
                    - rejected
                justification_id:
                  type: string
                  description: 'The <code>id</code> of an existing record in the host_cancellation_justifications table.'
                  example: consequatur
              required:
                - status
                - justification_id
      security: []
    get:
      summary: ''
      operationId: getApiV1AdminCancellationJustifications
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/erpnext/dashboard/accounting:
    get:
      summary: ''
      operationId: getApiV1ErpnextDashboardAccounting
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/prepartion-times:
    get:
      summary: ''
      operationId: getApiV1PrepartionTimes
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    post:
      summary: ''
      operationId: postApiV1PrepartionTimes
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: ''
                  example: consequatur
                description:
                  type: string
                  description: ''
                  example: 'Dolores dolorum amet iste laborum eius est dolor.'
              required:
                - name
      security: []
  '/api/v1/prepartion-times/{id}':
    get:
      summary: ''
      operationId: getApiV1PrepartionTimesId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    put:
      summary: ''
      operationId: putApiV1PrepartionTimesId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: ''
                  example: null
                description:
                  type: string
                  description: ''
                  example: 'Dolores dolorum amet iste laborum eius est dolor.'
      security: []
    delete:
      summary: ''
      operationId: deleteApiV1PrepartionTimesId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the prepartion time.'
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/offers:
    get:
      summary: ''
      operationId: getApiV1Offers
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    post:
      summary: ''
      operationId: postApiV1Offers
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: vmqeopfuudtdsufvyvddq
                target:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: amniihfqcoynlazghdtqt
                description:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: 'Necessitatibus architecto aut consequatur debitis et id.'
                  nullable: true
                is_active:
                  type: boolean
                  description: ''
                  example: true
                properties:
                  type: array
                  description: ''
                  example:
                    - []
                  items:
                    type: object
                    properties:
                      id:
                        type: string
                        description: 'The <code>id</code> of an existing record in the properties table.'
                        example: consequatur
                      discount_value:
                        type: number
                        description: 'Must be at least 0.'
                        example: 45
                      discount_type:
                        type: string
                        description: ''
                        example: percent
                        enum:
                          - percent
                          - amount
                      expiration_date:
                        type: string
                        description: 'Must be a valid date. Must be a date after <code>today</code>.'
                        example: '2107-03-05'
                    required:
                      - id
                      - discount_value
                      - discount_type
                      - expiration_date
                offer_type:
                  type: string
                  description: 'Nouveaux champs pour les conditions.'
                  example: weekend
                  enum:
                    - standard
                    - early_bird
                    - last_minute
                    - long_stay
                    - weekend
                    - seasonal
                  nullable: true
                min_days_before_checkin:
                  type: integer
                  description: 'Must be at least 0.'
                  example: 73
                  nullable: true
                max_days_before_checkin:
                  type: integer
                  description: 'Must be at least 0.'
                  example: 45
                  nullable: true
                min_nights:
                  type: integer
                  description: 'Must be at least 1.'
                  example: 56
                  nullable: true
                max_nights:
                  type: integer
                  description: 'Must be at least 1.'
                  example: 17
                  nullable: true
                valid_from:
                  type: string
                  description: 'Must be a valid date.'
                  example: '2026-02-03T17:41:19'
                  nullable: true
                valid_until:
                  type: string
                  description: 'Must be a valid date. Must be a date after or equal to <code>valid_from</code>.'
                  example: '2107-03-05'
                  nullable: true
                applicable_days:
                  type: array
                  description: 'Must be at least 0. Must not be greater than 6.'
                  example:
                    - 3
                  items:
                    type: integer
                max_uses:
                  type: integer
                  description: 'Must be at least 1.'
                  example: 56
                  nullable: true
                is_combinable:
                  type: boolean
                  description: ''
                  example: true
                  nullable: true
                priority:
                  type: integer
                  description: 'Must be at least 0.'
                  example: 16
                  nullable: true
              required:
                - name
                - target
                - properties
      security: []
  '/api/v1/offers/{id}':
    get:
      summary: ''
      operationId: getApiV1OffersId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    put:
      summary: ''
      operationId: putApiV1OffersId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: vmqeopfuudtdsufvyvddq
                target:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: amniihfqcoynlazghdtqt
                description:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: 'Necessitatibus architecto aut consequatur debitis et id.'
                  nullable: true
                is_active:
                  type: boolean
                  description: ''
                  example: true
      security: []
    delete:
      summary: ''
      operationId: deleteApiV1OffersId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the offer.'
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/packages:
    get:
      summary: ''
      operationId: getApiV1Packages
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    post:
      summary: ''
      operationId: postApiV1Packages
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: vmqeopfuudtdsufvyvddq
                target:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: amniihfqcoynlazghdtqt
                description:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: 'Necessitatibus architecto aut consequatur debitis et id.'
                  nullable: true
                price:
                  type: number
                  description: 'Must be at least 0.'
                  example: 31
                  nullable: true
                property_id:
                  type: string
                  description: 'The <code>id</code> of an existing record in the properties table.'
                  example: null
                  nullable: true
                is_active:
                  type: boolean
                  description: 'Maintenant optionnel pour tous.'
                  example: false
              required:
                - name
                - target
      security: []
  '/api/v1/packages/{id}':
    get:
      summary: ''
      operationId: getApiV1PackagesId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    put:
      summary: ''
      operationId: putApiV1PackagesId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    delete:
      summary: ''
      operationId: deleteApiV1PackagesId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the package.'
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/{packageId}/assign':
    post:
      summary: ''
      operationId: postApiV1PackageIdAssign
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: packageId
        description: ''
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/packages/{packageId}/properties/{propertyId}/toggle':
    patch:
      summary: ''
      operationId: patchApiV1PackagesPackageIdPropertiesPropertyIdToggle
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: packageId
        description: ''
        example: consequatur
        required: true
        schema:
          type: string
      -
        in: path
        name: propertyId
        description: ''
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/packages/{packageId}/properties/{propertyId}':
    delete:
      summary: ''
      operationId: deleteApiV1PackagesPackageIdPropertiesPropertyId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: packageId
        description: ''
        example: consequatur
        required: true
        schema:
          type: string
      -
        in: path
        name: propertyId
        description: ''
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/conveniences:
    get:
      summary: ''
      operationId: getApiV1Conveniences
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    post:
      summary: ''
      operationId: postApiV1Conveniences
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: ''
                  example: consequatur
                description:
                  type: string
                  description: ''
                  example: 'Dolores dolorum amet iste laborum eius est dolor.'
                is_active:
                  type: string
                  description: ''
                  example: consequatur
                conveniences_type_id:
                  type: string
                  description: ''
                  example: consequatur
              required:
                - name
                - is_active
                - conveniences_type_id
      security: []
  '/api/v1/conveniences/{id}':
    get:
      summary: ''
      operationId: getApiV1ConveniencesId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    put:
      summary: ''
      operationId: putApiV1ConveniencesId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: ''
                  example: consequatur
                description:
                  type: string
                  description: ''
                  example: 'Dolores dolorum amet iste laborum eius est dolor.'
                is_active:
                  type: string
                  description: ''
                  example: consequatur
                conveniences_type_id:
                  type: string
                  description: ''
                  example: consequatur
              required:
                - name
                - is_active
                - conveniences_type_id
      security: []
    delete:
      summary: ''
      operationId: deleteApiV1ConveniencesId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the convenience.'
        example: 17
        required: true
        schema:
          type: integer
  /api/v1/countries:
    get:
      summary: ''
      operationId: getApiV1Countries
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    post:
      summary: ''
      operationId: postApiV1Countries
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: ''
                  example: consequatur
                flag:
                  type: string
                  description: ''
                  example: consequatur
                zip_code:
                  type: string
                  description: ''
                  example: consequatur
                iso_code:
                  type: string
                  description: ''
                  example: consequatur
                phone_code:
                  type: string
                  description: ''
                  example: consequatur
                currency_code:
                  type: string
                  description: ''
                  example: consequatur
                support_commission:
                  type: number
                  description: "'time_zone' => 'required',."
                  example: 11613.31890586
                  nullable: true
                support_user_id:
                  type: string
                  description: 'The <code>id</code> of an existing record in the users table.'
                  example: null
                  nullable: true
              required:
                - name
                - flag
                - iso_code
                - phone_code
                - currency_code
      security: []
  '/api/v1/countries/{id}':
    get:
      summary: ''
      operationId: getApiV1CountriesId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    put:
      summary: ''
      operationId: putApiV1CountriesId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: ''
                  example: consequatur
                flag:
                  type: string
                  description: ''
                  example: consequatur
                zip_code:
                  type: string
                  description: ''
                  example: consequatur
                iso_code:
                  type: string
                  description: ''
                  example: null
                phone_code:
                  type: string
                  description: ''
                  example: consequatur
                currency_code:
                  type: string
                  description: ''
                  example: consequatur
      security: []
    delete:
      summary: ''
      operationId: deleteApiV1CountriesId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the country.'
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/cities:
    get:
      summary: ''
      operationId: getApiV1Cities
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    post:
      summary: ''
      operationId: postApiV1Cities
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: ''
                  example: consequatur
                country_id:
                  type: string
                  description: 'The <code>id</code> of an existing record in the countries table.'
                  example: consequatur
              required:
                - name
                - country_id
      security: []
  '/api/v1/cities/{id}':
    get:
      summary: ''
      operationId: getApiV1CitiesId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    put:
      summary: ''
      operationId: putApiV1CitiesId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: ''
                  example: consequatur
                country_id:
                  type: string
                  description: 'The <code>id</code> of an existing record in the countries table.'
                  example: consequatur
              required:
                - name
                - country_id
      security: []
    delete:
      summary: ''
      operationId: deleteApiV1CitiesId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the city.'
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/neighborhoods:
    get:
      summary: ''
      operationId: getApiV1Neighborhoods
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    post:
      summary: ''
      operationId: postApiV1Neighborhoods
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: ''
                  example: consequatur
                city_id:
                  type: string
                  description: 'The <code>id</code> of an existing record in the cities table.'
                  example: consequatur
              required:
                - name
                - city_id
      security: []
  '/api/v1/neighborhoods/{id}':
    get:
      summary: ''
      operationId: getApiV1NeighborhoodsId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    put:
      summary: ''
      operationId: putApiV1NeighborhoodsId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: ''
                  example: consequatur
                city_id:
                  type: string
                  description: 'The <code>id</code> of an existing record in the cities table.'
                  example: null
      security: []
    delete:
      summary: ''
      operationId: deleteApiV1NeighborhoodsId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the neighborhood.'
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/code-promos:
    get:
      summary: ''
      operationId: getApiV1CodePromos
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    post:
      summary: ''
      operationId: postApiV1CodePromos
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                code:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: vmqeopfuudtdsufvyvddq
                description:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: 'Dolores molestias ipsam sit.'
                  nullable: true
                value:
                  type: number
                  description: 'Must be at least 0.'
                  example: 25
                discount_type:
                  type: string
                  description: ''
                  example: fixed
                  enum:
                    - percentage
                    - fixed
                usage_limit:
                  type: integer
                  description: 'Must be at least 1.'
                  example: 19
                  nullable: true
                used_count:
                  type: integer
                  description: 'Must be at least 0.'
                  example: 57
                  nullable: true
                start_date:
                  type: string
                  description: 'Must be a valid date.'
                  example: '2026-02-03T17:41:22'
                end_date:
                  type: string
                  description: 'Must be a valid date. Must be a date after or equal to <code>start_date</code>.'
                  example: '2107-03-05'
              required:
                - code
                - value
                - discount_type
                - start_date
                - end_date
      security: []
  '/api/v1/code-promos/{id}':
    get:
      summary: ''
      operationId: getApiV1CodePromosId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    put:
      summary: ''
      operationId: putApiV1CodePromosId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                code:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: vmqeopfuudtdsufvyvddq
                description:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: 'Dolores molestias ipsam sit.'
                  nullable: true
                value:
                  type: number
                  description: 'Must be at least 0.'
                  example: 25
                discount_type:
                  type: string
                  description: ''
                  example: percentage
                  enum:
                    - percentage
                    - fixed
                usage_limit:
                  type: integer
                  description: 'Must be at least 1.'
                  example: 19
                  nullable: true
                used_count:
                  type: integer
                  description: 'Must be at least 0.'
                  example: 57
                  nullable: true
                start_date:
                  type: string
                  description: 'Must be a valid date.'
                  example: '2026-02-03T17:41:22'
                end_date:
                  type: string
                  description: 'Must be a valid date. Must be a date after or equal to <code>start_date</code>.'
                  example: '2107-03-05'
      security: []
    delete:
      summary: ''
      operationId: deleteApiV1CodePromosId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the code promo.'
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/code-promos/validate:
    post:
      summary: ''
      operationId: postApiV1CodePromosValidate
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                code:
                  type: string
                  description: ''
                  example: consequatur
                property_id:
                  type: integer
                  description: 'The <code>id</code> of an existing record in the properties table.'
                  example: 17
                  nullable: true
              required:
                - code
      security: []
  /api/v1/market-places:
    get:
      summary: ''
      operationId: getApiV1MarketPlaces
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    post:
      summary: ''
      operationId: postApiV1MarketPlaces
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: ''
                  example: consequatur
                description:
                  type: string
                  description: ''
                  example: 'Dolores dolorum amet iste laborum eius est dolor.'
                logo:
                  type: string
                  description: ''
                  example: consequatur
                url:
                  type: string
                  description: ''
                  example: 'http://kunze.biz/iste-laborum-eius-est-dolor.html'
              required:
                - name
      security: []
  '/api/v1/market-places/{id}':
    get:
      summary: ''
      operationId: getApiV1MarketPlacesId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    put:
      summary: ''
      operationId: putApiV1MarketPlacesId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: ''
                  example: consequatur
                description:
                  type: string
                  description: ''
                  example: 'Dolores dolorum amet iste laborum eius est dolor.'
                logo:
                  type: string
                  description: ''
                  example: consequatur
                url:
                  type: string
                  description: ''
                  example: 'http://kunze.biz/iste-laborum-eius-est-dolor.html'
              required:
                - name
      security: []
    delete:
      summary: ''
      operationId: deleteApiV1MarketPlacesId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the market place.'
        example: 17
        required: true
        schema:
          type: integer
  /api/v1/document-managements:
    get:
      summary: ''
      operationId: getApiV1DocumentManagements
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    post:
      summary: ''
      operationId: postApiV1DocumentManagements
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                document_name:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: vmqeopfuudtdsufvyvddq
                document_description:
                  type: string
                  description: ''
                  example: consequatur
                  nullable: true
                property_id:
                  type: integer
                  description: 'The <code>id</code> of an existing record in the properties table.'
                  example: 17
                document_file:
                  type: string
                  format: binary
                  description: 'Must be a file. Must not be greater than 5120 kilobytes.'
                party_type:
                  type: string
                  description: 'Limite à 5MB.'
                  example: individual
                  enum:
                    - individual
                    - company
              required:
                - document_name
                - property_id
                - document_file
                - party_type
      security: []
  '/api/v1/document-managements/{document_id}':
    get:
      summary: ''
      operationId: getApiV1DocumentManagementsDocument_id
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    delete:
      summary: ''
      operationId: deleteApiV1DocumentManagementsDocument_id
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: document_id
        description: 'The ID of the document.'
        example: 14
        required: true
        schema:
          type: integer
  '/api/v1/document-managements/{document_id}/update':
    post:
      summary: ''
      operationId: postApiV1DocumentManagementsDocument_idUpdate
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                document_name:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: vmqeopfuudtdsufvyvddq
                document_description:
                  type: string
                  description: ''
                  example: consequatur
                  nullable: true
                property_id:
                  type: integer
                  description: 'The <code>id</code> of an existing record in the properties table.'
                  example: 17
              required:
                - document_name
                - property_id
      security: []
    parameters:
      -
        in: path
        name: document_id
        description: 'The ID of the document.'
        example: 14
        required: true
        schema:
          type: integer
  '/api/v1/document-managements/{document_id}/status':
    put:
      summary: ''
      operationId: putApiV1DocumentManagementsDocument_idStatus
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: document_id
        description: 'The ID of the document.'
        example: 14
        required: true
        schema:
          type: integer
  '/api/v1/document-managements/{document_id}/share-link':
    post:
      summary: "Générer uniquement un lien de partage public (sans envoi d'email)."
      operationId: gnrerUniquementUnLienDePartagePublicsansEnvoiDemail
      description: 'POST /api/v1/document-managements/{document_id}/generate-link'
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: document_id
        description: 'The ID of the document.'
        example: 14
        required: true
        schema:
          type: integer
  '/api/v1/document-managements/{document_id}/share':
    post:
      summary: "Partager un document avec une liste d'emails."
      operationId: partagerUnDocumentAvecUneListeDemails
      description: 'POST /api/v1/document-managements/{document_id}/share'
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                emails:
                  type: array
                  description: 'Liste des emails destinataires.'
                  example:
                    - user1@example.com
                    - user2@example.com
                  items:
                    type: string
                can_edit:
                  type: boolean
                  description: 'Autoriser la modification. Default: true'
                  example: false
                  nullable: true
                expires_in_hours:
                  type: integer
                  description: 'Expiration du lien en heures.'
                  example: 72
                  nullable: true
                message:
                  type: string
                  description: "Message personnalisé pour l'email."
                  example: '"Voici le contrat à signer"'
                  nullable: true
              required:
                - emails
      security: []
    parameters:
      -
        in: path
        name: document_id
        description: 'The ID of the document.'
        example: 14
        required: true
        schema:
          type: integer
  /api/v1/claims-managements:
    get:
      summary: ''
      operationId: getApiV1ClaimsManagements
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    post:
      summary: ''
      operationId: postApiV1ClaimsManagements
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                mark:
                  type: string
                  description: "'designation' => 'required|string',."
                  example: consequatur
                description:
                  type: string
                  description: ''
                  example: 'Dolores dolorum amet iste laborum eius est dolor.'
                reservation_id:
                  type: string
                  description: ''
                  example: consequatur
              required:
                - mark
                - description
                - reservation_id
      security: []
  '/api/v1/claims-managements/{id}':
    put:
      summary: ''
      operationId: putApiV1ClaimsManagementsId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                mark:
                  type: string
                  description: ''
                  example: consequatur
                description:
                  type: string
                  description: ''
                  example: 'Dolores dolorum amet iste laborum eius est dolor.'
      security: []
    delete:
      summary: ''
      operationId: deleteApiV1ClaimsManagementsId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the claims management.'
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/services/my-services:
    get:
      summary: ''
      operationId: getApiV1ServicesMyServices
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/services:
    get:
      summary: ''
      operationId: getApiV1Services
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    post:
      summary: ''
      operationId: postApiV1Services
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  '/api/v1/services/{id}':
    get:
      summary: ''
      operationId: getApiV1ServicesId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    put:
      summary: ''
      operationId: putApiV1ServicesId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    delete:
      summary: ''
      operationId: deleteApiV1ServicesId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the service.'
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/electronic-key-managements:
    get:
      summary: ''
      operationId: getApiV1ElectronicKeyManagements
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    post:
      summary: ''
      operationId: postApiV1ElectronicKeyManagements
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                key_code:
                  type: string
                  description: ''
                  example: consequatur
                key_type:
                  type: string
                  description: ''
                  example: consequatur
                key_status:
                  type: string
                  description: ''
                  example: consequatur
                property_id:
                  type: string
                  description: ''
                  example: consequatur
                channel_id:
                  type: string
                  description: ''
                  example: consequatur
              required:
                - key_code
                - key_status
                - property_id
                - channel_id
      security: []
  '/api/v1/electronic-key-managements/{id}':
    get:
      summary: ''
      operationId: getApiV1ElectronicKeyManagementsId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    put:
      summary: ''
      operationId: putApiV1ElectronicKeyManagementsId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                key_code:
                  type: string
                  description: ''
                  example: consequatur
                key_type:
                  type: string
                  description: ''
                  example: consequatur
                key_status:
                  type: string
                  description: ''
                  example: consequatur
                property_id:
                  type: string
                  description: ''
                  example: consequatur
                channel_id:
                  type: string
                  description: ''
                  example: consequatur
              required:
                - key_code
                - key_status
                - property_id
                - channel_id
      security: []
    delete:
      summary: ''
      operationId: deleteApiV1ElectronicKeyManagementsId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the electronic key management.'
        example: 17
        required: true
        schema:
          type: integer
  /api/v1/property-cares/get-stats:
    get:
      summary: ''
      operationId: getApiV1PropertyCaresGetStats
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/property-cares:
    get:
      summary: ''
      operationId: getApiV1PropertyCares
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    post:
      summary: ''
      operationId: postApiV1PropertyCares
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                kind:
                  type: string
                  description: ''
                  example: consequatur
                description:
                  type: string
                  description: ''
                  example: 'Dolores dolorum amet iste laborum eius est dolor.'
                status:
                  type: string
                  description: ''
                  example: in_progress
                  enum:
                    - pending
                    - in_progress
                    - done
                  nullable: true
                emergency:
                  type: string
                  description: ''
                  example: high
                  enum:
                    - high
                    - normal
                    - medium
                    - low
                  nullable: true
                property_id:
                  type: string
                  description: 'The <code>id</code> of an existing record in the properties table.'
                  example: consequatur
              required:
                - kind
                - description
                - property_id
      security: []
  '/api/v1/property-cares/{id}':
    get:
      summary: ''
      operationId: getApiV1PropertyCaresId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    put:
      summary: ''
      operationId: putApiV1PropertyCaresId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                kind:
                  type: string
                  description: ''
                  example: consequatur
                description:
                  type: string
                  description: ''
                  example: 'Dolores dolorum amet iste laborum eius est dolor.'
                status:
                  type: string
                  description: ''
                  example: pending
                  enum:
                    - pending
                    - in_progress
                    - done
                  nullable: true
                emergency:
                  type: string
                  description: ''
                  example: low
                  enum:
                    - high
                    - normal
                    - medium
                    - low
                property_id:
                  type: string
                  description: 'The <code>id</code> of an existing record in the properties table.'
                  example: null
      security: []
    delete:
      summary: ''
      operationId: deleteApiV1PropertyCaresId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the property care.'
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/platform-links:
    get:
      summary: ''
      operationId: getApiV1PlatformLinks
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    post:
      summary: ''
      operationId: postApiV1PlatformLinks
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: ''
                  example: consequatur
                description:
                  type: string
                  description: ''
                  example: 'Dolores dolorum amet iste laborum eius est dolor.'
                logo:
                  type: string
                  description: ''
                  example: consequatur
                url:
                  type: string
                  description: ''
                  example: 'http://kunze.biz/iste-laborum-eius-est-dolor.html'
              required:
                - name
      security: []
  '/api/v1/platform-links/{id}':
    get:
      summary: ''
      operationId: getApiV1PlatformLinksId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    put:
      summary: ''
      operationId: putApiV1PlatformLinksId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: ''
                  example: consequatur
                description:
                  type: string
                  description: ''
                  example: 'Dolores dolorum amet iste laborum eius est dolor.'
                logo:
                  type: string
                  description: ''
                  example: consequatur
                url:
                  type: string
                  description: ''
                  example: 'http://kunze.biz/iste-laborum-eius-est-dolor.html'
              required:
                - name
      security: []
    delete:
      summary: ''
      operationId: deleteApiV1PlatformLinksId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the platform link.'
        example: 17
        required: true
        schema:
          type: integer
  /api/v1/contract-managements:
    get:
      summary: ''
      operationId: getApiV1ContractManagements
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    post:
      summary: ''
      operationId: postApiV1ContractManagements
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                title:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: vmqeopfuudtdsufvyvddq
                description:
                  type: string
                  description: ''
                  example: 'Dolores dolorum amet iste laborum eius est dolor.'
                  nullable: true
                start_date:
                  type: string
                  description: 'Must be a valid date.'
                  example: '2026-02-03T17:41:29'
                end_date:
                  type: string
                  description: 'Must be a valid date. Must be a date after or equal to <code>start_date</code>.'
                  example: '2107-03-05'
                contract_type:
                  type: string
                  format: binary
                  description: 'Must be a file. Must not be greater than 5120 kilobytes.'
                channel_id:
                  type: string
                  description: ''
                  example: consequatur
              required:
                - title
                - start_date
                - end_date
                - contract_type
                - channel_id
      security: []
  '/api/v1/contract-managements/{id}':
    get:
      summary: ''
      operationId: getApiV1ContractManagementsId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    put:
      summary: ''
      operationId: putApiV1ContractManagementsId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                title:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: vmqeopfuudtdsufvyvddq
                description:
                  type: string
                  description: ''
                  example: 'Dolores dolorum amet iste laborum eius est dolor.'
                  nullable: true
                start_date:
                  type: string
                  description: 'Must be a valid date.'
                  example: '2026-02-03T17:41:30'
                end_date:
                  type: string
                  description: 'Must be a valid date. Must be a date after or equal to <code>start_date</code>.'
                  example: '2107-03-05'
      security: []
    delete:
      summary: ''
      operationId: deleteApiV1ContractManagementsId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the contract management.'
        example: 17
        required: true
        schema:
          type: integer
  /api/v1/inventory-managements:
    get:
      summary: ''
      operationId: getApiV1InventoryManagements
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    post:
      summary: ''
      operationId: postApiV1InventoryManagements
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                location:
                  type: string
                  description: "'code_ref' => 'required|string',."
                  example: consequatur
                  nullable: true
                date:
                  type: string
                  description: "'status' => 'required|string',. Must be a valid date."
                  example: '2026-02-03T17:41:30'
                details:
                  type: string
                  description: ''
                  example: consequatur
                item_name:
                  type: string
                  description: ''
                  example: consequatur
                item_description:
                  type: string
                  description: ''
                  example: consequatur
                quantity:
                  type: string
                  description: ''
                  example: consequatur
                reservation_id:
                  type: string
                  description: ''
                  example: consequatur
                property_id:
                  type: string
                  description: ''
                  example: consequatur
                channel_id:
                  type: string
                  description: ''
                  example: consequatur
              required:
                - date
                - details
                - item_name
                - item_description
                - quantity
                - reservation_id
                - property_id
                - channel_id
      security: []
  '/api/v1/inventory-managements/{id}':
    get:
      summary: ''
      operationId: getApiV1InventoryManagementsId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    put:
      summary: ''
      operationId: putApiV1InventoryManagementsId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                location:
                  type: string
                  description: "'code_ref' => 'required|string',."
                  example: consequatur
                date:
                  type: string
                  description: "'status' => 'required|string',. Must be a valid date."
                  example: '2026-02-03T17:41:30'
                details:
                  type: string
                  description: ''
                  example: consequatur
                item_name:
                  type: string
                  description: ''
                  example: consequatur
                item_description:
                  type: string
                  description: ''
                  example: consequatur
                quantity:
                  type: integer
                  description: ''
                  example: 17
                reservation_id:
                  type: integer
                  description: ''
                  example: 17
                property_id:
                  type: integer
                  description: ''
                  example: 17
                channel_id:
                  type: integer
                  description: ''
                  example: 17
      security: []
    delete:
      summary: ''
      operationId: deleteApiV1InventoryManagementsId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the inventory management.'
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/seasons:
    get:
      summary: ''
      operationId: getApiV1Seasons
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    post:
      summary: ''
      operationId: postApiV1Seasons
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                season_libelle:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: vmqeopfuudtdsufvyvddq
                season_description:
                  type: string
                  description: ''
                  example: consequatur
                  nullable: true
                season_start_date:
                  type: string
                  description: 'Must be a valid date. Must be a date before or equal to <code>season_end_date</code>.'
                  example: '2020-05-31'
                season_end_date:
                  type: string
                  description: 'Must be a valid date. Must be a date after or equal to <code>season_start_date</code>.'
                  example: '2107-03-05'
                season_reduction_percent:
                  type: number
                  description: 'Must be between 0 and 100.'
                  example: 0
                season_min_stay:
                  type: integer
                  description: 'Must be at least 1.'
                  example: 56
                  nullable: true
                season_max_stay:
                  type: integer
                  description: 'Must be at least 1.'
                  example: 17
                  nullable: true
                season_reduction_policy:
                  type: string
                  description: ''
                  example: none
                  enum:
                    - booking
                    - nights
                    - total
                    - weekly
                    - none
                  nullable: true
                property_id:
                  type: string
                  description: 'The <code>id</code> of an existing record in the properties table.'
                  example: consequatur
              required:
                - season_libelle
                - season_start_date
                - season_end_date
                - season_reduction_percent
                - property_id
      security: []
  '/api/v1/seasons/{id}':
    get:
      summary: ''
      operationId: getApiV1SeasonsId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    put:
      summary: ''
      operationId: putApiV1SeasonsId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                season_libelle:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: vmqeopfuudtdsufvyvddq
                season_description:
                  type: string
                  description: ''
                  example: consequatur
                  nullable: true
                season_start_date:
                  type: string
                  description: 'Must be a valid date. Must be a date before or equal to <code>season_end_date</code>.'
                  example: '2020-05-31'
                season_end_date:
                  type: string
                  description: 'Must be a valid date. Must be a date after or equal to <code>season_start_date</code>.'
                  example: '2107-03-05'
                season_reduction_percent:
                  type: number
                  description: 'Must be between 0 and 100.'
                  example: 0
                season_min_stay:
                  type: integer
                  description: 'Must be at least 1.'
                  example: 56
                season_max_stay:
                  type: integer
                  description: 'Must be at least 1.'
                  example: 17
                season_reduction_policy:
                  type: string
                  description: ''
                  example: nights
                  enum:
                    - booking
                    - nights
                    - total
                    - weekly
                    - none
                  nullable: true
                season_status:
                  type: string
                  description: ''
                  example: active
                  enum:
                    - active
                    - inactive
                property_id:
                  type: string
                  description: 'The <code>id</code> of an existing record in the properties table.'
                  example: null
      security: []
    delete:
      summary: ''
      operationId: deleteApiV1SeasonsId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the season.'
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/booing-audits:
    get:
      summary: ''
      operationId: getApiV1BooingAudits
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    post:
      summary: ''
      operationId: postApiV1BooingAudits
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                booking_ref_code:
                  type: string
                  description: ''
                  example: consequatur
                checkin_date:
                  type: string
                  description: ''
                  example: consequatur
                checkout_date:
                  type: string
                  description: ''
                  example: consequatur
                guests:
                  type: string
                  description: ''
                  example: consequatur
                price_details:
                  type: string
                  description: ''
                  example: consequatur
                status:
                  type: string
                  description: ''
                  example: consequatur
                special_requests:
                  type: string
                  description: ''
                  example: consequatur
              required:
                - booking_ref_code
                - checkin_date
                - checkout_date
                - guests
                - price_details
                - status
      security: []
  '/api/v1/booing-audits/{id}':
    get:
      summary: ''
      operationId: getApiV1BooingAuditsId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    put:
      summary: ''
      operationId: putApiV1BooingAuditsId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                booking_ref_code:
                  type: string
                  description: ''
                  example: consequatur
                checkin_date:
                  type: string
                  description: ''
                  example: consequatur
                checkout_date:
                  type: string
                  description: ''
                  example: consequatur
                guests:
                  type: string
                  description: ''
                  example: consequatur
                price_details:
                  type: string
                  description: ''
                  example: consequatur
                status:
                  type: string
                  description: ''
                  example: consequatur
                special_requests:
                  type: string
                  description: ''
                  example: consequatur
              required:
                - booking_ref_code
                - checkin_date
                - checkout_date
                - guests
                - price_details
                - status
      security: []
    delete:
      summary: ''
      operationId: deleteApiV1BooingAuditsId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the booing audit.'
        example: 17
        required: true
        schema:
          type: integer
  /api/v1/partnerships:
    get:
      summary: ''
      operationId: getApiV1Partnerships
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    post:
      summary: ''
      operationId: postApiV1Partnerships
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                type:
                  type: string
                  description: ''
                  example: physique
                  enum:
                    - physique
                    - morale
                firstName:
                  type: string
                  description: 'Champs pour type physique. This field is required when <code>type</code> is <code>physique</code>.'
                  example: consequatur
                lastName:
                  type: string
                  description: 'This field is required when <code>type</code> is <code>physique</code>.'
                  example: consequatur
                libelle:
                  type: string
                  description: 'Champs pour type morale. This field is required when <code>type</code> is <code>morale</code>.'
                  example: consequatur
                email:
                  type: string
                  description: 'Must be a valid email address.'
                  example: carolyne.luettgen@example.org
                phone:
                  type: string
                  description: ''
                  example: consequatur
                contract_date:
                  type: string
                  description: 'Must be a valid date.'
                  example: '2026-02-03T17:41:31'
                address:
                  type: string
                  description: ''
                  example: consequatur
                contract_file:
                  type: string
                  format: binary
                  description: "'status' => 'required|string',\nfichier obligatoire. Must be a file."
              required:
                - type
                - email
                - phone
                - contract_date
                - address
                - contract_file
      security: []
  '/api/v1/partnerships/{id}':
    get:
      summary: ''
      operationId: getApiV1PartnershipsId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    put:
      summary: ''
      operationId: putApiV1PartnershipsId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: false
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                type:
                  type: string
                  description: ''
                  example: physique
                  enum:
                    - physique
                    - morale
                firstName:
                  type: string
                  description: 'Personne physique. This field is required when <code>type</code> is <code>physique</code>.'
                  example: consequatur
                  nullable: true
                lastName:
                  type: string
                  description: 'This field is required when <code>type</code> is <code>physique</code>.'
                  example: consequatur
                  nullable: true
                libelle:
                  type: string
                  description: 'Personne morale. This field is required when <code>type</code> is <code>morale</code>.'
                  example: consequatur
                  nullable: true
                email:
                  type: string
                  description: ''
                  example: null
                phone:
                  type: string
                  description: ''
                  example: null
                contract_date:
                  type: string
                  description: 'Must be a valid date.'
                  example: '2026-02-03T17:41:31'
                address:
                  type: string
                  description: ''
                  example: consequatur
                status:
                  type: string
                  description: ''
                  example: disable
                  enum:
                    - pending
                    - active
                    - disable
                contract_file:
                  type: string
                  format: binary
                  description: "'pending', 'active', 'disable'. Must be a file."
      security: []
    delete:
      summary: ''
      operationId: deleteApiV1PartnershipsId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the partnership.'
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/commodities:
    get:
      summary: ''
      operationId: getApiV1Commodities
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    post:
      summary: ''
      operationId: postApiV1Commodities
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: vmqeopfuudtdsufvyvddq
                type:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: amniihfqcoynlazghdtqt
              required:
                - name
                - type
      security: []
  '/api/v1/commodities/{id}':
    get:
      summary: ''
      operationId: getApiV1CommoditiesId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    put:
      summary: ''
      operationId: putApiV1CommoditiesId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    delete:
      summary: ''
      operationId: deleteApiV1CommoditiesId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the commodity.'
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/conditions-managements:
    get:
      summary: ''
      operationId: getApiV1ConditionsManagements
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    post:
      summary: ''
      operationId: postApiV1ConditionsManagements
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                title:
                  type: string
                  description: "'designation' => 'required|string',."
                  example: consequatur
                description:
                  type: string
                  description: ''
                  example: 'Dolores dolorum amet iste laborum eius est dolor.'
              required:
                - title
                - description
      security: []
  '/api/v1/conditions-managements/{id}':
    get:
      summary: ''
      operationId: getApiV1ConditionsManagementsId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    put:
      summary: ''
      operationId: putApiV1ConditionsManagementsId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                title:
                  type: string
                  description: ''
                  example: consequatur
                description:
                  type: string
                  description: ''
                  example: 'Dolores dolorum amet iste laborum eius est dolor.'
      security: []
    delete:
      summary: ''
      operationId: deleteApiV1ConditionsManagementsId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the conditions management.'
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/advertisements:
    get:
      summary: ''
      operationId: getApiV1Advertisements
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    post:
      summary: ''
      operationId: postApiV1Advertisements
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                type:
                  type: string
                  description: ''
                  example: consequatur
                posting_date:
                  type: string
                  description: 'Must be a valid date.'
                  example: '2026-02-03T17:41:32'
                status:
                  type: string
                  description: ''
                  example: approve
                  enum:
                    - pending
                    - approve
                    - refuse
                price:
                  type: string
                  description: ''
                  example: consequatur
                property_id:
                  type: string
                  description: ''
                  example: consequatur
              required:
                - type
                - posting_date
                - status
                - price
                - property_id
      security: []
  '/api/v1/advertisements/{id}':
    get:
      summary: ''
      operationId: getApiV1AdvertisementsId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    put:
      summary: ''
      operationId: putApiV1AdvertisementsId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                type:
                  type: string
                  description: ''
                  example: consequatur
                posting_date:
                  type: string
                  description: 'Must be a valid date.'
                  example: '2026-02-03T17:41:32'
                status:
                  type: string
                  description: ''
                  example: approve
                  enum:
                    - pending
                    - approve
                    - refuse
                price:
                  type: string
                  description: ''
                  example: consequatur
                property_id:
                  type: string
                  description: ''
                  example: consequatur
              required:
                - type
                - posting_date
                - status
                - price
                - property_id
      security: []
    delete:
      summary: ''
      operationId: deleteApiV1AdvertisementsId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the advertisement.'
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/partnerships/search:
    post:
      summary: ''
      operationId: postApiV1PartnershipsSearch
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  '/api/v1/advertisements/{user_id}/advertisement/status':
    patch:
      summary: ''
      operationId: patchApiV1AdvertisementsUser_idAdvertisementStatus
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                status:
                  type: string
                  description: ''
                  example: pending
                  enum:
                    - pending
                    - approve
                    - refuse
              required:
                - status
      security: []
    parameters:
      -
        in: path
        name: user_id
        description: 'The ID of the user.'
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/advertisements/all/advertisement:
    get:
      summary: ''
      operationId: getApiV1AdvertisementsAllAdvertisement
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  '/api/v1/advertisements/{user_id}/advertisement':
    get:
      summary: ''
      operationId: getApiV1AdvertisementsUser_idAdvertisement
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: user_id
        description: 'The ID of the user.'
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/advertisements/{user_id}/search-advertisement':
    post:
      summary: ''
      operationId: postApiV1AdvertisementsUser_idSearchAdvertisement
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: user_id
        description: 'The ID of the user.'
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/advertisements/{user_id}/search-type-property-advertisement':
    post:
      summary: ''
      operationId: postApiV1AdvertisementsUser_idSearchTypePropertyAdvertisement
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: user_id
        description: 'The ID of the user.'
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/advertisements/{user_id}/advertisement-pending':
    get:
      summary: ''
      operationId: getApiV1AdvertisementsUser_idAdvertisementPending
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: user_id
        description: 'The ID of the user.'
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/advertisements/{user_id}/advertisement-approve':
    get:
      summary: ''
      operationId: getApiV1AdvertisementsUser_idAdvertisementApprove
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: user_id
        description: 'The ID of the user.'
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/advertisements/{user_id}/advertisement-refuse':
    get:
      summary: ''
      operationId: getApiV1AdvertisementsUser_idAdvertisementRefuse
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: user_id
        description: 'The ID of the user.'
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/event/ical-feeds:
    get:
      summary: ''
      operationId: getApiV1EventIcalFeeds
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    post:
      summary: ''
      operationId: postApiV1EventIcalFeeds
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                title:
                  type: string
                  description: ''
                  example: consequatur
                url:
                  type: string
                  description: 'Must be a valid URL.'
                  example: 'https://www.mueller.com/laborum-eius-est-dolor-dolores-minus-voluptatem'
                user_id:
                  type: string
                  description: 'The <code>id</code> of an existing record in the users table.'
                  example: consequatur
                source:
                  type: string
                  description: ''
                  example: consequatur
                  nullable: true
              required:
                - title
                - url
                - user_id
      security: []
  '/api/v1/event/ical-feeds/{id}/sync':
    post:
      summary: ''
      operationId: postApiV1EventIcalFeedsIdSync
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the ical feed.'
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/event/ical-feeds/{id}/send-events':
    get:
      summary: ''
      operationId: getApiV1EventIcalFeedsIdSendEvents
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the ical feed.'
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/ical-feeds/export-all-reservation-to-ical:
    get:
      summary: ''
      operationId: getApiV1IcalFeedsExportAllReservationToIcal
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  '/api/v1/ical-feeds/{reservation_id}/export-single-reservation-ical':
    get:
      summary: ''
      operationId: getApiV1IcalFeedsReservation_idExportSingleReservationIcal
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: reservation_id
        description: 'The ID of the reservation.'
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/ical-feeds/{property_id}/export-ical':
    get:
      summary: ''
      operationId: getApiV1IcalFeedsProperty_idExportIcal
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: property_id
        description: 'The ID of the property.'
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/ical-feeds/import-ical-file:
    post:
      summary: ''
      operationId: postApiV1IcalFeedsImportIcalFile
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/ical-feeds/import-ical-from-url:
    post:
      summary: ''
      operationId: postApiV1IcalFeedsImportIcalFromUrl
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/pricing/overrides:
    post:
      summary: 'Store a newly created price override.'
      operationId: storeANewlyCreatedPriceOverride
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    get:
      summary: 'Afficher tous les tarifs pour une propriété.'
      operationId: afficherTousLesTarifsPourUneProprit
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/calendar/availability:
    get:
      summary: ''
      operationId: getApiV1CalendarAvailability
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/calendar/check:
    post:
      summary: ''
      operationId: postApiV1CalendarCheck
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                property_id:
                  type: string
                  description: 'The <code>id</code> of an existing record in the properties table.'
                  example: consequatur
                checkin_date:
                  type: string
                  description: 'Must be a valid date.'
                  example: '2026-02-03T17:41:32'
                checkout_date:
                  type: string
                  description: 'Must be a valid date. Must be a date after <code>checkin_date</code>.'
                  example: '2107-03-05'
              required:
                - property_id
                - checkin_date
                - checkout_date
      security: []
  '/api/v1/tasks/{task}/status':
    patch:
      summary: ''
      operationId: patchApiV1TasksTaskStatus
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                status:
                  type: string
                  description: ''
                  example: cancelled
                  enum:
                    - todo
                    - in_progress
                    - completed
                    - cancelled
              required:
                - status
      security: []
    parameters:
      -
        in: path
        name: task
        description: 'The task.'
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/tasks/by-status:
    get:
      summary: ''
      operationId: getApiV1TasksByStatus
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                status:
                  type: string
                  description: ''
                  example: cancelled
                  enum:
                    - todo
                    - in_progress
                    - completed
                    - cancelled
              required:
                - status
      security: []
  /api/v1/tasks/overdue:
    get:
      summary: ''
      operationId: getApiV1TasksOverdue
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/tasks:
    get:
      summary: ''
      operationId: getApiV1Tasks
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    post:
      summary: ''
      operationId: postApiV1Tasks
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: vmqeopfuudtdsufvyvddq
                title:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: amniihfqcoynlazghdtqt
                description:
                  type: string
                  description: ''
                  example: 'Dolores dolorum amet iste laborum eius est dolor.'
                  nullable: true
                starting_date:
                  type: string
                  description: 'Must be a valid date.'
                  example: '2026-02-03T17:41:32'
                ending_date:
                  type: string
                  description: 'Must be a valid date. Must be a date after or equal to <code>starting_date</code>.'
                  example: '2107-03-05'
                status:
                  type: string
                  description: ''
                  example: in_progress
                  enum:
                    - todo
                    - in_progress
                    - completed
                    - cancelled
                priority:
                  type: string
                  description: ''
                  example: low
                  enum:
                    - low
                    - medium
                    - high
                    - urgent
                user_ids:
                  type: array
                  description: 'The <code>id</code> of an existing record in the users table.'
                  example: null
                  items:
                    type: string
              required:
                - name
                - title
                - starting_date
                - ending_date
                - status
                - priority
      security: []
  '/api/v1/tasks/{id}':
    get:
      summary: ''
      operationId: getApiV1TasksId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    put:
      summary: ''
      operationId: putApiV1TasksId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: vmqeopfuudtdsufvyvddq
                title:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: amniihfqcoynlazghdtqt
                description:
                  type: string
                  description: ''
                  example: 'Dolores dolorum amet iste laborum eius est dolor.'
                  nullable: true
                starting_date:
                  type: string
                  description: 'Must be a valid date.'
                  example: '2026-02-03T17:41:32'
                ending_date:
                  type: string
                  description: 'Must be a valid date. Must be a date after or equal to <code>starting_date</code>.'
                  example: '2107-03-05'
                status:
                  type: string
                  description: ''
                  example: completed
                  enum:
                    - todo
                    - in_progress
                    - completed
                    - cancelled
                priority:
                  type: string
                  description: ''
                  example: low
                  enum:
                    - low
                    - medium
                    - high
                    - urgent
                user_ids:
                  type: array
                  description: 'The <code>id</code> of an existing record in the users table.'
                  example: null
                  items:
                    type: string
              required:
                - name
                - title
                - starting_date
                - ending_date
                - status
                - priority
      security: []
    delete:
      summary: ''
      operationId: deleteApiV1TasksId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the task.'
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/mail_template_placeholders:
    get:
      summary: 'Display a listing of the resource.'
      operationId: displayAListingOfTheResource
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    post:
      summary: 'Store a newly created resource in storage.'
      operationId: storeANewlyCreatedResourceInStorage
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  '/api/v1/mail_template_placeholders/{id}':
    get:
      summary: 'Display the specified resource.'
      operationId: displayTheSpecifiedResource
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    put:
      summary: 'Update the specified resource in storage.'
      operationId: updateTheSpecifiedResourceInStorage
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    delete:
      summary: 'Remove the specified resource from storage.'
      operationId: removeTheSpecifiedResourceFromStorage
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the mail template placeholder.'
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/mail_template_placeholders/{mail_template_placeholder}/status':
    put:
      summary: ''
      operationId: putApiV1Mail_template_placeholdersMail_template_placeholderStatus
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: mail_template_placeholder
        description: ''
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/mail_template_settings:
    get:
      summary: 'Display a listing of the resource.'
      operationId: displayAListingOfTheResource
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    post:
      summary: 'Store a newly created resource in storage.'
      operationId: storeANewlyCreatedResourceInStorage
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  '/api/v1/mail_template_settings/{id}':
    get:
      summary: 'Display the specified resource.'
      operationId: displayTheSpecifiedResource
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    put:
      summary: 'Met à jour les paramètres de notification pour plusieurs propriétés.'
      operationId: metJourLesParamtresDeNotificationPourPlusieursProprits
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    delete:
      summary: 'Remove the specified resource from storage.'
      operationId: removeTheSpecifiedResourceFromStorage
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the mail template setting.'
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/mail_template_types:
    get:
      summary: 'Liste tous les types de notifications, groupés par catégorie.'
      operationId: listeTousLesTypesDeNotificationsGroupsParCatgorie
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    post:
      summary: 'Store a newly created resource in storage.'
      operationId: storeANewlyCreatedResourceInStorage
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  '/api/v1/mail_template_types/{id}':
    get:
      summary: '(Optionnel) Récupérer un type spécifique.'
      operationId: OptionnelRcuprerUnTypeSpcifique
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    put:
      summary: 'Update the specified resource in storage.'
      operationId: updateTheSpecifiedResourceInStorage
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    delete:
      summary: 'Remove the specified resource from storage.'
      operationId: removeTheSpecifiedResourceFromStorage
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the mail template type.'
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/mail_template_categories:
    get:
      summary: ''
      operationId: getApiV1Mail_template_categories
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    post:
      summary: ''
      operationId: postApiV1Mail_template_categories
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  '/api/v1/mail_template_categories/{id}':
    get:
      summary: ''
      operationId: getApiV1Mail_template_categoriesId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    put:
      summary: ''
      operationId: putApiV1Mail_template_categoriesId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    delete:
      summary: ''
      operationId: deleteApiV1Mail_template_categoriesId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the mail template category.'
        example: 1
        required: true
        schema:
          type: integer
  '/api/v1/mail_template_categories/{mail_template_category}/status':
    put:
      summary: ''
      operationId: putApiV1Mail_template_categoriesMail_template_categoryStatus
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: mail_template_category
        description: ''
        example: 1
        required: true
        schema:
          type: integer
  /api/v1/mail_templates:
    get:
      summary: ''
      operationId: getApiV1Mail_templates
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    post:
      summary: ''
      operationId: postApiV1Mail_templates
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  '/api/v1/mail_templates/{id}':
    get:
      summary: ''
      operationId: getApiV1Mail_templatesId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    put:
      summary: ''
      operationId: putApiV1Mail_templatesId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    delete:
      summary: ''
      operationId: deleteApiV1Mail_templatesId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the mail template.'
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/mail_templates/{mail_template}/status':
    put:
      summary: ''
      operationId: putApiV1Mail_templatesMail_templateStatus
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: mail_template
        description: ''
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/get_languages:
    get:
      summary: ''
      operationId: getApiV1Get_languages
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  '/api/v1/show_language/{language_id}':
    get:
      summary: ''
      operationId: getApiV1Show_languageLanguage_id
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: language_id
        description: 'The ID of the language.'
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/store_language:
    post:
      summary: ''
      operationId: postApiV1Store_language
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  '/api/v1/update_language/{language_id}':
    put:
      summary: ''
      operationId: putApiV1Update_languageLanguage_id
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: language_id
        description: 'The ID of the language.'
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/delete_language/{language_id}':
    delete:
      summary: ''
      operationId: deleteApiV1Delete_languageLanguage_id
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: language_id
        description: 'The ID of the language.'
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/change_status_language/{language_id}':
    put:
      summary: ''
      operationId: putApiV1Change_status_languageLanguage_id
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: language_id
        description: 'The ID of the language.'
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/chatbots:
    get:
      summary: ''
      operationId: getApiV1Chatbots
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/chatbots/new_chat:
    post:
      summary: ''
      operationId: postApiV1ChatbotsNew_chat
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  '/api/v1/chatbots/{chatbot_id}':
    get:
      summary: ''
      operationId: getApiV1ChatbotsChatbot_id
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: chatbot_id
        description: 'The ID of the chatbot.'
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/chatbots/{chatbot_id}/closed':
    put:
      summary: ''
      operationId: putApiV1ChatbotsChatbot_idClosed
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: chatbot_id
        description: 'The ID of the chatbot.'
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/chatbots/{chatbot_id}/destroy':
    delete:
      summary: ''
      operationId: deleteApiV1ChatbotsChatbot_idDestroy
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: chatbot_id
        description: 'The ID of the chatbot.'
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/history_chatbots/chat_to_bot:
    post:
      summary: ''
      operationId: postApiV1History_chatbotsChat_to_bot
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  '/api/v1/history_chatbots/{chatbot_history_id}/response':
    put:
      summary: ''
      operationId: putApiV1History_chatbotsChatbot_history_idResponse
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: chatbot_history_id
        description: 'The ID of the chatbot history.'
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/history_chatbots/{chatbot_history_id}':
    get:
      summary: ''
      operationId: getApiV1History_chatbotsChatbot_history_id
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: chatbot_history_id
        description: 'The ID of the chatbot history.'
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/history_chatbots/{chatbot_history_id}/update':
    post:
      summary: ''
      operationId: postApiV1History_chatbotsChatbot_history_idUpdate
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: chatbot_history_id
        description: 'The ID of the chatbot history.'
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/history_chatbots/{chatbot_history_id}/destroy':
    delete:
      summary: ''
      operationId: deleteApiV1History_chatbotsChatbot_history_idDestroy
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: chatbot_history_id
        description: 'The ID of the chatbot history.'
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/emails:
    get:
      summary: ''
      operationId: getApiV1Emails
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    post:
      summary: ''
      operationId: postApiV1Emails
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  '/api/v1/emails/{mail_id}':
    get:
      summary: ''
      operationId: getApiV1EmailsMail_id
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    put:
      summary: ''
      operationId: putApiV1EmailsMail_id
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    delete:
      summary: ''
      operationId: deleteApiV1EmailsMail_id
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: mail_id
        description: 'The ID of the mail.'
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/category_emails:
    get:
      summary: ''
      operationId: getApiV1Category_emails
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    post:
      summary: ''
      operationId: postApiV1Category_emails
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  '/api/v1/category_emails/{category_mail_id}':
    get:
      summary: ''
      operationId: getApiV1Category_emailsCategory_mail_id
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    put:
      summary: ''
      operationId: putApiV1Category_emailsCategory_mail_id
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    delete:
      summary: ''
      operationId: deleteApiV1Category_emailsCategory_mail_id
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: category_mail_id
        description: 'The ID of the category mail.'
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/calendar/events:
    get:
      summary: ''
      operationId: getApiV1CalendarEvents
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    post:
      summary: ''
      operationId: postApiV1CalendarEvents
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  '/api/v1/calendar/events/{eventId}':
    get:
      summary: ''
      operationId: getApiV1CalendarEventsEventId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    put:
      summary: ''
      operationId: putApiV1CalendarEventsEventId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    delete:
      summary: ''
      operationId: deleteApiV1CalendarEventsEventId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: eventId
        description: ''
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/calendar/events/{eventId}/participants':
    post:
      summary: ''
      operationId: postApiV1CalendarEventsEventIdParticipants
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: eventId
        description: ''
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/calendar/events/{eventId}/participants/{userId}':
    delete:
      summary: ''
      operationId: deleteApiV1CalendarEventsEventIdParticipantsUserId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: eventId
        description: ''
        example: consequatur
        required: true
        schema:
          type: string
      -
        in: path
        name: userId
        description: ''
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/user/logout:
    post:
      summary: ''
      operationId: postApiV1UserLogout
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/user/list:
    get:
      summary: ''
      operationId: getApiV1UserList
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  '/api/v1/user/{user_id}':
    get:
      summary: ''
      operationId: getApiV1UserUser_id
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: user_id
        description: 'The ID of the user.'
        example: 2
        required: true
        schema:
          type: integer
  /api/v1/user/search-user:
    post:
      summary: ''
      operationId: postApiV1UserSearchUser
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/user/user-active:
    get:
      summary: ''
      operationId: getApiV1UserUserActive
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/user/user-to-block:
    get:
      summary: ''
      operationId: getApiV1UserUserToBlock
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/user/user-owner:
    get:
      summary: ''
      operationId: getApiV1UserUserOwner
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/user/user-guest:
    get:
      summary: ''
      operationId: getApiV1UserUserGuest
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/user/become-owner:
    post:
      summary: ''
      operationId: postApiV1UserBecomeOwner
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                user_type:
                  type: string
                  description: ''
                  example: company
                  enum:
                    - individual
                    - company
                country_region:
                  type: string
                  description: ''
                  example: consequatur
                id_type:
                  type: string
                  description: ''
                  example: passport
                  enum:
                    - identity_card
                    - passport
                    - driver_licence
                id_number:
                  type: string
                  description: ''
                  example: consequatur
                id_expiry_date:
                  type: string
                  description: 'Must be a valid date.'
                  example: '2026-02-03T17:41:37'
                id_reco_path:
                  type: string
                  description: 'Must not be greater than 2048 characters.'
                  example: mqeopfuudtdsufvyvddqa
                id_verso_path:
                  type: string
                  description: 'Must not be greater than 2048 characters.'
                  example: mniihfqcoynlazghdtqtq
                  nullable: true
                place_type:
                  type: string
                  description: ''
                  example: house
                  enum:
                    - house
                    - apartment
                    - other
                  nullable: true
                place_details:
                  type: string
                  description: ''
                  example: consequatur
                address:
                  type: string
                  description: ''
                  example: consequatur
                city:
                  type: string
                  description: ''
                  example: consequatur
                state:
                  type: string
                  description: ''
                  example: consequatur
                postal_code:
                  type: string
                  description: ''
                  example: consequatur
                country:
                  type: string
                  description: ''
                  example: consequatur
                latitude:
                  type: number
                  description: ''
                  example: 11613.31890586
                longitude:
                  type: number
                  description: ''
                  example: 11613.31890586
              required:
                - user_type
                - country_region
                - id_type
                - id_number
                - id_expiry_date
                - id_reco_path
                - place_details
                - address
                - city
                - state
                - postal_code
                - country
                - latitude
                - longitude
      security: []
  /api/v1/user/owner-requests:
    get:
      summary: ''
      operationId: getApiV1UserOwnerRequests
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  '/api/v1/user/accept-owner-request/{requesterId}':
    post:
      summary: ''
      operationId: postApiV1UserAcceptOwnerRequestRequesterId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: requesterId
        description: ''
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/user/owner-request-status:
    get:
      summary: ''
      operationId: getApiV1UserOwnerRequestStatus
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/user/individuals:
    get:
      summary: ''
      operationId: getApiV1UserIndividuals
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/user/companies:
    get:
      summary: ''
      operationId: getApiV1UserCompanies
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/user/stats:
    get:
      summary: ''
      operationId: getApiV1UserStats
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/user/stats/detailed:
    get:
      summary: ''
      operationId: getApiV1UserStatsDetailed
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/user/admin-support/assign:
    post:
      summary: ''
      operationId: postApiV1UserAdminSupportAssign
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/user/locale:
    patch:
      summary: "Mettre à jour la langue préférée de l'utilisateur\nPATCH /api/v1/users/locale"
      operationId: mettreJourLaLanguePrfreDeLutilisateurPATCHapiv1userslocale
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                locale:
                  type: string
                  description: ''
                  example: fr
                  enum:
                    - fr
                    - en
                    - es
                    - de
              required:
                - locale
      security: []
  /api/v1/locale:
    get:
      summary: "Obtenir la langue actuelle détectée\nGET /api/v1/locale"
      operationId: obtenirLaLangueActuelleDtecteGETapiv1locale
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/reservations/search:
    get:
      summary: ''
      operationId: getApiV1ReservationsSearch
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/reservations/monthly-stats:
    get:
      summary: ''
      operationId: getApiV1ReservationsMonthlyStats
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/reservations/dashboard-stats:
    get:
      summary: ''
      operationId: getApiV1ReservationsDashboardStats
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/reservations/analytics/predictive:
    get:
      summary: ''
      operationId: getApiV1ReservationsAnalyticsPredictive
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/reservations/count-reservations-user:
    get:
      summary: ''
      operationId: getApiV1ReservationsCountReservationsUser
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/reservations/traffic-origins:
    get:
      summary: ''
      operationId: getApiV1ReservationsTrafficOrigins
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/reservations/modified:
    get:
      summary: ''
      operationId: getApiV1ReservationsModified
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  '/api/v1/reservations/with-owner/{owner_id}':
    get:
      summary: ''
      operationId: getApiV1ReservationsWithOwnerOwner_id
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: owner_id
        description: 'The ID of the owner.'
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/reservations/with-client/{client_id}':
    get:
      summary: "Récupérer l'historique des réservations d'un client spécifique sur les propriétés du propriétaire connecté"
      operationId: rcuprerLhistoriqueDesRservationsDunClientSpcifiqueSurLesPropritsDuPropritaireConnect
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: client_id
        description: 'The ID of the client.'
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/reservations/{id}/invoice':
    post:
      summary: ''
      operationId: postApiV1ReservationsIdInvoice
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the reservation.'
        example: 2
        required: true
        schema:
          type: integer
  '/api/v1/reservations/{id}/approve-refund':
    post:
      summary: 'Approuve un remboursement en attente pour une réservation'
      operationId: approuveUnRemboursementEnAttentePourUneRservation
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the reservation.'
        example: 2
        required: true
        schema:
          type: integer
  '/api/v1/reservations/{id}/reject-refund':
    post:
      summary: 'Rejette un remboursement en attente pour une réservation'
      operationId: rejetteUnRemboursementEnAttentePourUneRservation
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the reservation.'
        example: 2
        required: true
        schema:
          type: integer
  '/api/v1/reservations/{reservation_id}/cancel':
    post:
      summary: ''
      operationId: postApiV1ReservationsReservation_idCancel
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                reason:
                  type: string
                  description: 'Must not be greater than 500 characters.'
                  example: vmqeopfuudtdsufvyvddq
                  nullable: true
      security: []
    parameters:
      -
        in: path
        name: reservation_id
        description: 'The ID of the reservation.'
        example: 2
        required: true
        schema:
          type: integer
  '/api/v1/calendar/properties/{property_id}/availability':
    get:
      summary: "Retourne le calendrier journalier d'une propriété entre deux dates."
      operationId: retourneLeCalendrierJournalierDunePropritEntreDeuxDates
      description: 'GET /api/v1/calendar/properties/{property_id}/availability?from=YYYY-MM-DD&to=YYYY-MM-DD'
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                from:
                  type: string
                  description: 'Must be a valid date in the format <code>Y-m-d</code>.'
                  example: '2026-02-03'
                  nullable: true
                to:
                  type: string
                  description: 'Must be a valid date in the format <code>Y-m-d</code>.'
                  example: '2026-02-03'
                  nullable: true
      security: []
    parameters:
      -
        in: path
        name: property_id
        description: 'The ID of the property.'
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/calendar/properties/{property_id}/full':
    get:
      summary: ''
      operationId: getApiV1CalendarPropertiesProperty_idFull
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                from:
                  type: string
                  description: 'Must be a valid date in the format <code>Y-m-d</code>.'
                  example: '2026-02-03'
                  nullable: true
                to:
                  type: string
                  description: 'Must be a valid date in the format <code>Y-m-d</code>.'
                  example: '2026-02-03'
                  nullable: true
      security: []
    parameters:
      -
        in: path
        name: property_id
        description: 'The ID of the property.'
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/calendar/properties/blocked-dates:
    get:
      summary: 'Retourne la liste des dates bloquées sur la période demandée.'
      operationId: retourneLaListeDesDatesBloquesSurLaPriodeDemande
      description: "Route: GET /api/calendar/properties/blocked-dates?from=YYYY-MM-DD&to=YYYY-MM-DD&property_id=123 (property_id optionnel)\nSi property_id est fourni, on retourne uniquement pour cette propriété, sinon pour toutes les propriétés."
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                from:
                  type: string
                  description: 'Must be a valid date in the format <code>Y-m-d</code>.'
                  example: '2026-02-03'
                  nullable: true
                to:
                  type: string
                  description: 'Must be a valid date in the format <code>Y-m-d</code>.'
                  example: '2026-02-03'
                  nullable: true
                property_id:
                  type: integer
                  description: 'The <code>id</code> of an existing record in the properties table.'
                  example: 17
                  nullable: true
      security: []
  '/api/v1/calendar/properties/{property_id}/blocked-dates/{block_id}':
    put:
      summary: "Modifier une date bloquée spécifique\nPUT /api/v1/calendar/properties/{property_id}/blocks/{block_id}"
      operationId: modifierUneDateBloqueSpcifiquePUTapiv1calendarpropertiespropertyIdblocksblockId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                start_date:
                  type: string
                  description: 'Must be a valid date in the format <code>Y-m-d</code>.'
                  example: '2026-02-03'
                end_date:
                  type: string
                  description: 'Must be a valid date in the format <code>Y-m-d</code>.'
                  example: '2026-02-03'
                reason:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: vmqeopfuudtdsufvyvddq
                  nullable: true
              required:
                - start_date
                - end_date
      security: []
    parameters:
      -
        in: path
        name: property_id
        description: 'The ID of the property.'
        example: consequatur
        required: true
        schema:
          type: string
      -
        in: path
        name: block_id
        description: 'The ID of the block.'
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/calendar/properties/{property_id}/overview':
    get:
      summary: "Version légère pour les calendriers (sans les détails jour par jour des quotes)\nGET /api/v1/calendar/properties/{property_id}/overview?from=YYYY-MM-DD&to=YYYY-MM-DD"
      operationId: versionLgrePourLesCalendrierssansLesDtailsJourParJourDesQuotesGETapiv1calendarpropertiespropertyIdoverviewfromYYYYMMDDtoYYYYMMDD
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                from:
                  type: string
                  description: 'Must be a valid date in the format <code>Y-m-d</code>.'
                  example: '2026-02-03'
                  nullable: true
                to:
                  type: string
                  description: 'Must be a valid date in the format <code>Y-m-d</code>.'
                  example: '2026-02-03'
                  nullable: true
      security: []
    parameters:
      -
        in: path
        name: property_id
        description: 'The ID of the property.'
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/calendar/properties/with-calendar-actions:
    get:
      summary: ''
      operationId: getApiV1CalendarPropertiesWithCalendarActions
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/calendar/properties/with-calendar-actions/paginated:
    get:
      summary: "Version avec pagination pour beaucoup de propriétés\nGET /api/v1/calendar/properties-with-actions/paginated?page=1&per_page=10"
      operationId: versionAvecPaginationPourBeaucoupDePropritsGETapiv1calendarpropertiesWithActionspaginatedpage1perPage10
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  '/api/v1/calendar/properties/{property_id}/bulk':
    post:
      summary: "Opérations en masse sur le calendrier d'une propriété."
      operationId: oprationsEnMasseSurLeCalendrierDuneProprit
      description: "POST /api/v1/calendar/properties/{property_id}/bulk\nbody: { action: block|unblock|set_price, start_date, end_date, reason?, price_per_night? }"
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                action:
                  type: string
                  description: ''
                  example: unblock
                  enum:
                    - block
                    - unblock
                    - set_price
                start_date:
                  type: string
                  description: 'Must be a valid date in the format <code>Y-m-d</code>.'
                  example: '2026-02-03'
                end_date:
                  type: string
                  description: 'Must be a valid date in the format <code>Y-m-d</code>.'
                  example: '2026-02-03'
                reason:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: vmqeopfuudtdsufvyvddq
                  nullable: true
                price_per_night:
                  type: number
                  description: 'Must be at least 0.'
                  example: 1
                  nullable: true
                cleaning_fee:
                  type: number
                  description: 'Must be at least 0.'
                  example: 45
                  nullable: true
                extra_guest_fee:
                  type: number
                  description: 'Must be at least 0.'
                  example: 46
                  nullable: true
              required:
                - action
                - start_date
                - end_date
      security: []
    parameters:
      -
        in: path
        name: property_id
        description: 'The ID of the property.'
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/calendar/properties/{property_id}/close':
    post:
      summary: 'Créer une fermeture de dates (non réservable) pour une propriété.'
      operationId: crerUneFermetureDeDatesnonRservablePourUneProprit
      description: "POST /api/v1/calendar/properties/{property_id}/close\nbody: { start_date: Y-m-d, end_date: Y-m-d, reason?: string }\nRègle: on refuse si la période chevauche une réservation EXISTANTE quel que soit le statut (pending, inquiry, confirmed, etc.)."
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                start_date:
                  type: string
                  description: 'Must be a valid date in the format <code>Y-m-d</code>.'
                  example: '2026-02-03'
                end_date:
                  type: string
                  description: 'Must be a valid date in the format <code>Y-m-d</code>.'
                  example: '2026-02-03'
                reason:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: vmqeopfuudtdsufvyvddq
                  nullable: true
              required:
                - start_date
                - end_date
      security: []
    delete:
      summary: 'Supprimer toutes les fermetures qui chevauchent une plage.'
      operationId: supprimerToutesLesFermeturesQuiChevauchentUnePlage
      description: 'DELETE /api/v1/calendar/properties/{property_id}/close?from=YYYY-MM-DD&to=YYYY-MM-DD'
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                from:
                  type: string
                  description: 'Must be a valid date in the format <code>Y-m-d</code>.'
                  example: '2026-02-03'
                to:
                  type: string
                  description: 'Must be a valid date in the format <code>Y-m-d</code>.'
                  example: '2026-02-03'
              required:
                - from
                - to
      security: []
    parameters:
      -
        in: path
        name: property_id
        description: 'The ID of the property.'
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/calendar/properties/{property_id}/close/{block_id}':
    delete:
      summary: 'Supprimer une fermeture précise par ID.'
      operationId: supprimerUneFermeturePrciseParID
      description: 'DELETE /api/v1/calendar/properties/{property_id}/close/{block_id}'
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: property_id
        description: 'The ID of the property.'
        example: consequatur
        required: true
        schema:
          type: string
      -
        in: path
        name: block_id
        description: 'The ID of the block.'
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/quotes/preview:
    post:
      summary: ''
      operationId: postApiV1QuotesPreview
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                property_id:
                  type: string
                  description: 'The <code>id</code> of an existing record in the properties table.'
                  example: consequatur
                checkin_date:
                  type: string
                  description: 'Must be a valid date.'
                  example: '2026-02-03T17:41:40'
                checkout_date:
                  type: string
                  description: 'Must be a valid date. Must be a date after <code>checkin_date</code>.'
                  example: '2107-03-05'
                guests:
                  type: array
                  description: ''
                  example:
                    - []
                  items:
                    type: object
                    properties:
                      first_name:
                        type: string
                        description: 'Must not be greater than 255 characters.'
                        example: mqeopfuudtdsufvyvddqa
                        nullable: true
                      last_name:
                        type: string
                        description: 'Must not be greater than 255 characters.'
                        example: mniihfqcoynlazghdtqtq
                        nullable: true
                      email:
                        type: string
                        description: 'Must be a valid email address. Must not be greater than 255 characters.'
                        example: ablanda@example.org
                        nullable: true
                      phone:
                        type: string
                        description: 'Must not be greater than 30 characters.'
                        example: wbpilpmufinllwloauydl
                        nullable: true
                      country:
                        type: string
                        description: 'Must not be greater than 2 characters.'
                        example: sm
                        nullable: true
                      language:
                        type: string
                        description: 'Must not be greater than 5 characters.'
                        example: sjury
                        nullable: true
                      age:
                        type: integer
                        description: 'Must be at least 0.'
                        example: 74
                        nullable: true
                promo_code:
                  type: string
                  description: 'The <code>code</code> of an existing record in the code_promos table.'
                  example: consequatur
                  nullable: true
                services:
                  type: array
                  description: 'The <code>id</code> of an existing record in the services table.'
                  example:
                    - 17
                  items:
                    type: integer
                origin:
                  type: string
                  description: ''
                  example: website
                  enum:
                    - website
                    - phone
                    - walk_in
                    - booking
                    - airbnb
                    - expedia
                    - channex
                  nullable: true
                refund_policy_id:
                  type: integer
                  description: 'The <code>id</code> of an existing record in the refund_policy table.'
                  example: 17
                  nullable: true
              required:
                - property_id
                - checkin_date
                - checkout_date
                - guests
      security: []
  /api/v1/quotes:
    post:
      summary: ''
      operationId: postApiV1Quotes
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                property_id:
                  type: string
                  description: 'The <code>id</code> of an existing record in the properties table.'
                  example: consequatur
                checkin_date:
                  type: string
                  description: 'Must be a valid date.'
                  example: '2026-02-03T17:41:40'
                checkout_date:
                  type: string
                  description: 'Must be a valid date. Must be a date after <code>checkin_date</code>.'
                  example: '2107-03-05'
                guests:
                  type: array
                  description: ''
                  example:
                    - []
                  items:
                    type: object
                    properties:
                      first_name:
                        type: string
                        description: 'Must not be greater than 255 characters.'
                        example: mqeopfuudtdsufvyvddqa
                        nullable: true
                      last_name:
                        type: string
                        description: 'Must not be greater than 255 characters.'
                        example: mniihfqcoynlazghdtqtq
                        nullable: true
                      email:
                        type: string
                        description: 'Must be a valid email address. Must not be greater than 255 characters.'
                        example: ablanda@example.org
                        nullable: true
                      phone:
                        type: string
                        description: 'Must not be greater than 30 characters.'
                        example: wbpilpmufinllwloauydl
                        nullable: true
                      country:
                        type: string
                        description: 'Must not be greater than 2 characters.'
                        example: sm
                        nullable: true
                      language:
                        type: string
                        description: 'Must not be greater than 5 characters.'
                        example: sjury
                        nullable: true
                      age:
                        type: integer
                        description: 'Must be at least 0.'
                        example: 74
                        nullable: true
                promo_code:
                  type: string
                  description: 'The <code>code</code> of an existing record in the code_promos table.'
                  example: consequatur
                  nullable: true
                services:
                  type: array
                  description: 'The <code>id</code> of an existing record in the services table.'
                  example:
                    - 17
                  items:
                    type: integer
                origin:
                  type: string
                  description: ''
                  example: consequatur
                  nullable: true
                refund_policy_id:
                  type: integer
                  description: 'The <code>id</code> of an existing record in the refund_policy table.'
                  example: 17
                  nullable: true
                expires_in_hours:
                  type: integer
                  description: 'Must be at least 1. Must not be greater than 720.'
                  example: 13
                  nullable: true
                create_reservation:
                  type: boolean
                  description: ''
                  example: false
                block_dates:
                  type: boolean
                  description: ''
                  example: true
                notes:
                  type: string
                  description: ''
                  example: consequatur
                  nullable: true
              required:
                - property_id
                - checkin_date
                - checkout_date
                - guests
      security: []
  '/api/v1/quotes/{id}':
    get:
      summary: ''
      operationId: getApiV1QuotesId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    delete:
      summary: ''
      operationId: deleteApiV1QuotesId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the quote.'
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/quotes/{id}/convert':
    post:
      summary: ''
      operationId: postApiV1QuotesIdConvert
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                status:
                  type: string
                  description: ''
                  example: completed
                  enum:
                    - pending
                    - confirmed
                    - cancelled
                    - completed
                  nullable: true
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the quote.'
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/quotes/{id}/status':
    put:
      summary: ''
      operationId: putApiV1QuotesIdStatus
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                status:
                  type: string
                  description: ''
                  example: draft
                  enum:
                    - draft
                    - sent
              required:
                - status
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the quote.'
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/quotes/{id}/update':
    put:
      summary: ''
      operationId: putApiV1QuotesIdUpdate
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                checkin_date:
                  type: string
                  description: 'Must be a valid date.'
                  example: '2026-02-03T17:41:41'
                checkout_date:
                  type: string
                  description: 'Must be a valid date. Must be a date after <code>checkin_date</code>.'
                  example: '2107-03-05'
                guests:
                  type: array
                  description: ''
                  example: null
                  items:
                    type: object
                    properties:
                      first_name:
                        type: string
                        description: 'Must not be greater than 255 characters.'
                        example: qeopfuudtdsufvyvddqam
                        nullable: true
                      last_name:
                        type: string
                        description: 'Must not be greater than 255 characters.'
                        example: niihfqcoynlazghdtqtqx
                        nullable: true
                      email:
                        type: string
                        description: 'Must be a valid email address. Must not be greater than 255 characters.'
                        example: adams.selmer@example.com
                        nullable: true
                      phone:
                        type: string
                        description: 'Must not be greater than 30 characters.'
                        example: pilpmufinllwloauydlsm
                        nullable: true
                      country:
                        type: string
                        description: 'Must not be greater than 2 characters.'
                        example: sj
                        nullable: true
                      language:
                        type: string
                        description: 'Must not be greater than 5 characters.'
                        example: uryvo
                        nullable: true
                      age:
                        type: integer
                        description: 'Must be at least 0.'
                        example: 32
                        nullable: true
                promo_code:
                  type: string
                  description: 'The <code>code</code> of an existing record in the code_promos table.'
                  example: consequatur
                  nullable: true
                services:
                  type: array
                  description: 'The <code>id</code> of an existing record in the services table.'
                  example:
                    - 17
                  items:
                    type: integer
                origin:
                  type: string
                  description: ''
                  example: consequatur
                  nullable: true
                refund_policy_id:
                  type: integer
                  description: 'The <code>id</code> of an existing record in the refund_policy table.'
                  example: 17
                  nullable: true
                expires_in_hours:
                  type: integer
                  description: 'Must be at least 1. Must not be greater than 720.'
                  example: 13
                  nullable: true
                status:
                  type: string
                  description: ''
                  example: sent
                  enum:
                    - draft
                    - sent
                    - confirmed
                    - expired
                    - converted
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the quote.'
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/quotes/{id}/send':
    post:
      summary: ''
      operationId: postApiV1QuotesIdSend
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the quote.'
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/quotes/{id}/email-preview':
    get:
      summary: ''
      operationId: getApiV1QuotesIdEmailPreview
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the quote.'
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/quotes/{id}/email-draft':
    put:
      summary: ''
      operationId: putApiV1QuotesIdEmailDraft
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                email_subject_draft:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: vmqeopfuudtdsufvyvddq
                  nullable: true
                email_body_draft:
                  type: string
                  description: ''
                  example: consequatur
                  nullable: true
                email_locale:
                  type: string
                  description: 'Must not be greater than 10 characters.'
                  example: hi_IN
                  nullable: true
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the quote.'
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/quotes/{id}/deletion-check':
    get:
      summary: ''
      operationId: getApiV1QuotesIdDeletionCheck
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the quote.'
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/properties:
    post:
      summary: ''
      operationId: postApiV1Properties
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                name_of_structure:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: vmqeopfuudtdsufvyvddq
                  nullable: true
                who_are_you:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: amniihfqcoynlazghdtqt
                  nullable: true
                internal_name:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: qxbajwbpilpmufinllwlo
                  nullable: true
                public_name:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: auydlsmsjuryvojcybzvr
                some_informations:
                  type: object
                  description: ''
                  example: []
                  properties: {  }
                wifi_informations:
                  type: object
                  description: ''
                  example: null
                  properties: {  }
                  nullable: true
                square_footage:
                  type: integer
                  description: 'Must be at least 0.'
                  example: 73
                check_in_time:
                  type: string
                  description: 'Must be a valid date in the format <code>H:i:s</code>.'
                  example: '17:41:41'
                check_in_time_end:
                  type: string
                  description: 'Must be a valid date in the format <code>H:i:s</code>.'
                  example: '17:41:41'
                check_out_time:
                  type: string
                  description: 'Must be a valid date in the format <code>H:i:s</code>.'
                  example: '17:41:41'
                type:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: mqeopfuudtdsufvyvddqa
                  nullable: true
                description:
                  type: string
                  description: ''
                  example: 'Dolores dolorum amet iste laborum eius est dolor.'
                state:
                  type: string
                  description: ''
                  example: consequatur
                  nullable: true
                address:
                  type: string
                  description: ''
                  example: consequatur
                location:
                  type: string
                  description: ''
                  example: consequatur
                country_name:
                  type: string
                  description: ''
                  example: consequatur
                  nullable: true
                country_id:
                  type: string
                  description: 'The <code>id</code> of an existing record in the countries table.'
                  example: null
                  nullable: true
                commodities:
                  type: array
                  description: 'The <code>id</code> of an existing record in the commodities table.'
                  example: null
                  items:
                    type: string
                features:
                  type: object
                  description: ''
                  example: []
                  properties: {  }
                cancellation_policy:
                  type: object
                  description: ''
                  example: null
                  properties: {  }
                  nullable: true
                rules:
                  type: object
                  description: ''
                  example: []
                  properties: {  }
                breakfast_included:
                  type: boolean
                  description: "'status' => 'required|string',."
                  example: false
                pets_allowed:
                  type: boolean
                  description: ''
                  example: true
                base_price:
                  type: number
                  description: 'Must be at least 0.'
                  example: 73
                price_per_night:
                  type: number
                  description: 'Must be at least 0.'
                  example: 45
                  nullable: true
                currency_id:
                  type: integer
                  description: 'The <code>id</code> of an existing record in the currencies table.'
                  example: 17
                  nullable: true
                pricing:
                  type: number
                  description: 'Must be at least 0.'
                  example: 45
                  nullable: true
                capacity:
                  type: integer
                  description: 'Must be at least 1.'
                  example: 56
                cleaning_fee:
                  type: number
                  description: 'Must be at least 0.'
                  example: 16
                  nullable: true
                tax:
                  type: number
                  description: 'Must be at least 0.'
                  example: 50
                  nullable: true
                like_count:
                  type: integer
                  description: 'Must be at least 0.'
                  example: 55
                  nullable: true
                security_deposit:
                  type: number
                  description: 'Must be at least 0.'
                  example: 19
                rating:
                  type: number
                  description: 'Must be at least 0. Must not be greater than 5.'
                  example: 4
                specifications:
                  type: object
                  description: ''
                  example: []
                  properties: {  }
                availability_rules:
                  type: object
                  description: ''
                  example: []
                  properties: {  }
                room_facilities:
                  type: object
                  description: ''
                  example: []
                  properties: {  }
                image_urls:
                  type: array
                  description: 'Must be a valid URL.'
                  example:
                    - 'http://kunze.biz/iste-laborum-eius-est-dolor.html'
                  items:
                    type: string
                import_id:
                  type: string
                  description: ''
                  example: consequatur
                  nullable: true
                import_selected:
                  type: array
                  description: ''
                  example:
                    - consequatur
                  items:
                    type: string
                convenience_id:
                  type: string
                  description: "Relations directes requises par la BD\n'room_type_id' => 'exists:room_type,id',\n'space_type_id' => 'exists:space_types,id',. The <code>id</code> of an existing record in the conveniences table."
                  example: null
                property_type_id:
                  type: string
                  description: 'The <code>id</code> of an existing record in the property_types table.'
                  example: consequatur
                neighborhood_id:
                  type: integer
                  description: ''
                  example: 17
                  nullable: true
                user_id:
                  type: string
                  description: ''
                  example: null
                room_types_channex:
                  type: array
                  description: 'Nouveau: room types Channex à créer après la propriété.'
                  example: null
                  items:
                    type: object
                    nullable: true
                    properties:
                      title:
                        type: string
                        description: 'This field is required when <code>room_types_channex</code> is present. Must not be greater than 255 characters.'
                        example: mqeopfuudtdsufvyvddqa
                      count_of_rooms:
                        type: integer
                        description: 'This field is required when <code>room_types_channex</code> is present. Must be at least 1.'
                        example: 45
                      occ_adults:
                        type: integer
                        description: 'This field is required when <code>room_types_channex</code> is present. Must be at least 0.'
                        example: 46
                      default_occupancy:
                        type: integer
                        description: 'This field is required when <code>room_types_channex</code> is present. Must be at least 0.'
                        example: 28
                      occ_children:
                        type: integer
                        description: 'Must be at least 0.'
                        example: 30
                        nullable: true
                      occ_infants:
                        type: integer
                        description: 'Must be at least 0.'
                        example: 25
                        nullable: true
                rate_plans_channex:
                  type: array
                  description: 'Option A: création des rate plans uniquement si fournis.'
                  example: null
                  items:
                    type: object
                    nullable: true
                    properties:
                      title:
                        type: string
                        description: 'This field is required when <code>rate_plans_channex</code> is present. Must not be greater than 255 characters.'
                        example: fqcoynlazghdtqtqxbajw
                      room_type_title:
                        type: string
                        description: 'This field is required when <code>rate_plans_channex</code> is present. Must not be greater than 255 characters.'
                        example: bpilpmufinllwloauydls
                      currency:
                        type: string
                        description: ''
                        example: consequatur
                        nullable: true
                      children_fee:
                        type: string
                        description: ''
                        example: consequatur
                        nullable: true
                      infant_fee:
                        type: string
                        description: ''
                        example: consequatur
                        nullable: true
                      max_stay:
                        type: object
                        description: 'Must contain 7 items.'
                        example: null
                        properties: {  }
                        nullable: true
                      min_stay_arrival:
                        type: object
                        description: 'Must contain 7 items.'
                        example: null
                        properties: {  }
                        nullable: true
                      min_stay_through:
                        type: object
                        description: 'Must contain 7 items.'
                        example: null
                        properties: {  }
                        nullable: true
                      closed_to_arrival:
                        type: object
                        description: 'Must contain 7 items.'
                        example: null
                        properties: {  }
                        nullable: true
                      closed_to_departure:
                        type: object
                        description: 'Must contain 7 items.'
                        example: null
                        properties: {  }
                        nullable: true
                      stop_sell:
                        type: object
                        description: 'Must contain 7 items.'
                        example: null
                        properties: {  }
                        nullable: true
                      options:
                        type: array
                        description: ''
                        example: null
                        items:
                          type: object
                          nullable: true
                          properties:
                            occupancy:
                              type: integer
                              description: 'This field is required when <code>rate_plans_channex.*.options</code> is present. Must be at least 1.'
                              example: 45
                            is_primary:
                              type: boolean
                              description: 'This field is required when <code>rate_plans_channex.*.options</code> is present.'
                              example: false
                            rate:
                              type: number
                              description: 'This field is required when <code>rate_plans_channex.*.options</code> is present.'
                              example: 11613.31890586
                refund_policy_id:
                  type: string
                  description: 'Refund policy ID. The <code>id</code> of an existing record in the refund_policies table.'
                  example: null
                  nullable: true
                images:
                  type: array
                  description: 'Must be an image. Must not be greater than 5120 kilobytes.'
                  items:
                    type: string
                    format: binary
                    nullable: true
              required:
                - public_name
                - some_informations
                - square_footage
                - check_in_time
                - check_in_time_end
                - check_out_time
                - description
                - address
                - location
                - features
                - rules
                - breakfast_included
                - pets_allowed
                - base_price
                - capacity
                - security_deposit
                - rating
                - specifications
                - availability_rules
                - room_facilities
                - property_type_id
      security: []
    get:
      summary: "}\n                }\n            }\n        )\n    ),"
      operationId: ''
      description: "@OA\\Response(\n        response=500,\n        description=\"Server error\","
      parameters: []
      responses: {  }
      tags:
        - Propriétés
      security: []
  /api/v1/properties/import:
    post:
      summary: "Importer une propriété depuis une URL externe (Airbnb, Booking, Agoda)\nPOST /api/v1/properties/import"
      operationId: importerUnePropritDepuisUneURLExterneAirbnbBookingAgodaPOSTapiv1propertiesimport
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  '/api/v1/properties/{property_id}':
    post:
      summary: ''
      operationId: postApiV1PropertiesProperty_id
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: false
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                internal_name:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: vmqeopfuudtdsufvyvddq
                public_name:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: amniihfqcoynlazghdtqt
                some_informations:
                  type: object
                  description: ''
                  example: null
                  properties: {  }
                wifi_informations:
                  type: object
                  description: ''
                  example: null
                  properties: {  }
                square_footage:
                  type: integer
                  description: 'Must not be greater than 999999.'
                  example: 16
                check_in_time:
                  type: string
                  description: 'Must be a valid date in the format <code>H:i:s</code>.'
                  example: '17:41:41'
                check_in_time_end:
                  type: string
                  description: 'Must be a valid date in the format <code>H:i:s</code>.'
                  example: '17:41:41'
                check_out_time:
                  type: string
                  description: 'Must be a valid date in the format <code>H:i:s</code>.'
                  example: '17:41:41'
                type:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: xbajwbpilpmufinllwloa
                description:
                  type: string
                  description: ''
                  example: 'Dolores dolorum amet iste laborum eius est dolor.'
                address:
                  type: string
                  description: ''
                  example: consequatur
                location:
                  type: string
                  description: ''
                  example: consequatur
                country_name:
                  type: string
                  description: ''
                  example: consequatur
                country_id:
                  type: string
                  description: 'The <code>id</code> of an existing record in the countries table.'
                  example: null
                commodities:
                  type: array
                  description: 'The <code>id</code> of an existing record in the commodities table.'
                  example: null
                  items:
                    type: string
                features:
                  type: object
                  description: ''
                  example: null
                  properties: {  }
                cancellation_policy:
                  type: object
                  description: ''
                  example: null
                  properties: {  }
                rules:
                  type: object
                  description: ''
                  example: null
                  properties: {  }
                status:
                  type: string
                  description: ''
                  example: consequatur
                breakfast_included:
                  type: boolean
                  description: ''
                  example: false
                pets_allowed:
                  type: boolean
                  description: ''
                  example: true
                base_price:
                  type: number
                  description: ''
                  example: 11613.31890586
                price_per_night:
                  type: number
                  description: ''
                  example: 11613.31890586
                pricing:
                  type: number
                  description: ''
                  example: 11613.31890586
                capacity:
                  type: integer
                  description: ''
                  example: 17
                cleaning_fee:
                  type: number
                  description: ''
                  example: 11613.31890586
                tax:
                  type: number
                  description: ''
                  example: 11613.31890586
                like_count:
                  type: integer
                  description: ''
                  example: 17
                security_deposit:
                  type: number
                  description: ''
                  example: 11613.31890586
                rating:
                  type: number
                  description: ''
                  example: 11613.31890586
                specifications:
                  type: object
                  description: ''
                  example: null
                  properties: {  }
                availability_rules:
                  type: object
                  description: ''
                  example: null
                  properties: {  }
                room_facilities:
                  type: object
                  description: ''
                  example: null
                  properties: {  }
                room_types_channex:
                  type: array
                  description: 'Relations Channex.'
                  example: null
                  items:
                    type: object
                    nullable: true
                    properties:
                      title:
                        type: string
                        description: 'This field is required when <code>room_types_channex</code> is present. Must not be greater than 255 characters.'
                        example: mqeopfuudtdsufvyvddqa
                      count_of_rooms:
                        type: integer
                        description: 'This field is required when <code>room_types_channex</code> is present. Must be at least 1.'
                        example: 45
                      occ_adults:
                        type: integer
                        description: 'This field is required when <code>room_types_channex</code> is present. Must be at least 0.'
                        example: 46
                      default_occupancy:
                        type: integer
                        description: 'This field is required when <code>room_types_channex</code> is present. Must be at least 0.'
                        example: 28
                      occ_children:
                        type: integer
                        description: 'Must be at least 0.'
                        example: 30
                        nullable: true
                      occ_infants:
                        type: integer
                        description: 'Must be at least 0.'
                        example: 25
                        nullable: true
                rate_plans_channex:
                  type: array
                  description: ''
                  example: null
                  items:
                    type: object
                    nullable: true
                    properties:
                      title:
                        type: string
                        description: 'This field is required when <code>rate_plans_channex</code> is present. Must not be greater than 255 characters.'
                        example: fqcoynlazghdtqtqxbajw
                      room_type_title:
                        type: string
                        description: 'This field is required when <code>rate_plans_channex</code> is present. Must not be greater than 255 characters.'
                        example: bpilpmufinllwloauydls
                      currency:
                        type: string
                        description: ''
                        example: consequatur
                        nullable: true
                      children_fee:
                        type: string
                        description: ''
                        example: consequatur
                        nullable: true
                      infant_fee:
                        type: string
                        description: ''
                        example: consequatur
                        nullable: true
                      max_stay:
                        type: object
                        description: 'Must contain 7 items.'
                        example: null
                        properties: {  }
                        nullable: true
                      min_stay_arrival:
                        type: object
                        description: 'Must contain 7 items.'
                        example: null
                        properties: {  }
                        nullable: true
                      min_stay_through:
                        type: object
                        description: 'Must contain 7 items.'
                        example: null
                        properties: {  }
                        nullable: true
                      closed_to_arrival:
                        type: object
                        description: 'Must contain 7 items.'
                        example: null
                        properties: {  }
                        nullable: true
                      closed_to_departure:
                        type: object
                        description: 'Must contain 7 items.'
                        example: null
                        properties: {  }
                        nullable: true
                      stop_sell:
                        type: object
                        description: 'Must contain 7 items.'
                        example: null
                        properties: {  }
                        nullable: true
                      options:
                        type: array
                        description: ''
                        example: null
                        items:
                          type: object
                          nullable: true
                          properties:
                            occupancy:
                              type: integer
                              description: 'This field is required when <code>rate_plans_channex.*.options</code> is present. Must be at least 1.'
                              example: 45
                            is_primary:
                              type: boolean
                              description: 'This field is required when <code>rate_plans_channex.*.options</code> is present.'
                              example: false
                            rate:
                              type: number
                              description: 'This field is required when <code>rate_plans_channex.*.options</code> is present.'
                              example: 11613.31890586
                delete_media_ids:
                  type: array
                  description: 'The <code>id</code> of an existing record in the media table.'
                  example:
                    - 17
                  items:
                    type: integer
                keep_media_ids:
                  type: array
                  description: 'The <code>id</code> of an existing record in the media table.'
                  example:
                    - 17
                  items:
                    type: integer
                property_type_id:
                  type: string
                  description: "Foreign keys\n'room_type_id' => 'sometimes|exists:room_types,id',\n'space_type_id' => 'sometimes|exists:space_types,id',. The <code>id</code> of an existing record in the property_types table."
                  example: null
                neighborhood_id:
                  type: integer
                  description: "'convenience_id' => 'sometimes|exists:conveniences,id',."
                  example: 17
                  nullable: true
                refund_policy_id:
                  type: string
                  description: 'Refund policy. The <code>id</code> of an existing record in the refund_policies table.'
                  example: null
                images:
                  type: array
                  description: 'Images. Must be an image. Must not be greater than 5120 kilobytes.'
                  items:
                    type: string
                    format: binary
                medias:
                  type: array
                  description: 'Must be an image. Must not be greater than 5120 kilobytes.'
                  items:
                    type: string
                    format: binary
      security: []
    delete:
      summary: ''
      operationId: deleteApiV1PropertiesProperty_id
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    get:
      summary: 'Mini description: Détails complets d’une propriété (relations, dates réservées, propriétaire).'
      operationId: miniDescriptionDtailsCompletsDunePropritrelationsDatesRservesPropritaire
      description: ''
      parameters: []
      responses:
        200:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  message: 'Property retrieved successfully'
                  data:
                    id: 12
                    public_name: 'Villa Océane'
                    reserved_dates: []
                    total_comments: 0
                properties:
                  message:
                    type: string
                    example: 'Property retrieved successfully'
                  data:
                    type: object
                    properties:
                      id:
                        type: integer
                        example: 12
                      public_name:
                        type: string
                        example: 'Villa Océane'
                      reserved_dates:
                        type: array
                        example: []
                      total_comments:
                        type: integer
                        example: 0
        404:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  error: 'Property not found'
                properties:
                  error:
                    type: string
                    example: 'Property not found'
        500:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  error: 'Failed to retrieve property'
                properties:
                  error:
                    type: string
                    example: 'Failed to retrieve property'
      tags:
        - Propriétés
      security: []
    parameters:
      -
        in: path
        name: property_id
        description: 'The ID of the property.'
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/properties/{property_id}/comments':
    get:
      summary: ''
      operationId: getApiV1PropertiesProperty_idComments
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: property_id
        description: 'The ID of the property.'
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/properties/{user_id}/property':
    get:
      summary: ''
      operationId: getApiV1PropertiesUser_idProperty
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: user_id
        description: 'The ID of the user.'
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/properties/{user_id}/property/active':
    get:
      summary: ''
      operationId: getApiV1PropertiesUser_idPropertyActive
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: user_id
        description: 'The ID of the user.'
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/properties/{user_id}/property/inactive':
    get:
      summary: ''
      operationId: getApiV1PropertiesUser_idPropertyInactive
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: user_id
        description: 'The ID of the user.'
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/properties/{user_id}/property/search-type':
    post:
      summary: ''
      operationId: postApiV1PropertiesUser_idPropertySearchType
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: user_id
        description: 'The ID of the user.'
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/properties/{user_id}/property/search-date':
    post:
      summary: ''
      operationId: postApiV1PropertiesUser_idPropertySearchDate
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: user_id
        description: 'The ID of the user.'
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/properties/{id}/recommended':
    patch:
      summary: ''
      operationId: patchApiV1PropertiesIdRecommended
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the property.'
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/properties/webhooks/espo:
    post:
      summary: ''
      operationId: postApiV1PropertiesWebhooksEspo
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  '/api/v1/properties/{id}/room-availability':
    get:
      summary: "Get real-time room availability for a property\nGET /api/v1/properties/{id}/room-availability"
      operationId: getRealTimeRoomAvailabilityForAPropertyGETapiv1propertiesidroomAvailability
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the property.'
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/claims-managements/{user_id}/claims-managements':
    get:
      summary: ''
      operationId: getApiV1ClaimsManagementsUser_idClaimsManagements
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: user_id
        description: 'The ID of the user.'
        example: 1
        required: true
        schema:
          type: integer
  '/api/v1/notifications/{id}/mark-as-read':
    patch:
      summary: ''
      operationId: patchApiV1NotificationsIdMarkAsRead
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the notification.'
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/notifications/send:
    post:
      summary: ''
      operationId: postApiV1NotificationsSend
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                title:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: vmqeopfuudtdsufvyvddq
                message:
                  type: string
                  description: ''
                  example: consequatur
                payload:
                  type: string
                  description: ''
                  example: consequatur
                  nullable: true
                role:
                  type: string
                  description: ''
                  example: admin
                  enum:
                    - admin
                    - user
                    - guest
                  nullable: true
                user_ids:
                  type: array
                  description: 'The <code>id</code> of an existing record in the users table.'
                  example: null
                  items:
                    type: string
              required:
                - title
                - message
      security: []
  /api/v1/notifications/send-fcm-notification:
    post:
      summary: ''
      operationId: postApiV1NotificationsSendFcmNotification
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/notifications/sent:
    get:
      summary: ''
      operationId: getApiV1NotificationsSent
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  '/api/v1/reservations/{id}':
    get:
      summary: ''
      operationId: getApiV1ReservationsId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    put:
      summary: ''
      operationId: putApiV1ReservationsId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                property_id:
                  type: string
                  description: 'The <code>id</code> of an existing record in the properties table.'
                  example: null
                checkin_date:
                  type: string
                  description: 'Must be a valid date.'
                  example: '2026-02-03T17:41:47'
                checkout_date:
                  type: string
                  description: 'Must be a valid date. Must be a date after <code>checkin_date</code>.'
                  example: '2107-03-05'
                price_details:
                  type: object
                  description: ''
                  example: null
                  properties: {  }
                guests:
                  type: object
                  description: ''
                  example: null
                  properties: {  }
                special_requests:
                  type: string
                  description: ''
                  example: consequatur
                  nullable: true
                status:
                  type: string
                  description: ''
                  example: confirmed
                  enum:
                    - pending
                    - confirmed
                    - cancelled
                    - completed
                rooms:
                  type: array
                  description: ''
                  example: null
                  items:
                    type: object
                    properties:
                      room_type_id:
                        type: integer
                        description: ''
                        example: 17
                      rate_plan_id:
                        type: integer
                        description: ''
                        example: 17
                      rooms_count:
                        type: integer
                        description: 'Must be at least 1.'
                        example: 45
      security: []
    delete:
      summary: ''
      operationId: deleteApiV1ReservationsId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the reservation.'
        example: 2
        required: true
        schema:
          type: integer
  /api/v1/medias:
    get:
      summary: ''
      operationId: getApiV1Medias
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    post:
      summary: ''
      operationId: postApiV1Medias
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                media_type:
                  type: string
                  description: ''
                  example: consequatur
                file:
                  type: string
                  format: binary
                  description: 'Must be an image. Must not be greater than 5120 kilobytes.'
                property_id:
                  type: string
                  description: 'The <code>id</code> of an existing record in the properties table.'
                  example: consequatur
              required:
                - media_type
                - file
                - property_id
      security: []
  '/api/v1/medias/{id}':
    get:
      summary: ''
      operationId: getApiV1MediasId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    put:
      summary: ''
      operationId: putApiV1MediasId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: false
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                media_type:
                  type: string
                  description: ''
                  example: consequatur
                file:
                  type: string
                  format: binary
                  description: 'Must be a file.'
                property_id:
                  type: string
                  description: 'The <code>id</code> of an existing record in the properties table.'
                  example: null
      security: []
    delete:
      summary: ''
      operationId: deleteApiV1MediasId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the media.'
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/comments:
    get:
      summary: ''
      operationId: getApiV1Comments
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    post:
      summary: ''
      operationId: postApiV1Comments
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                comment:
                  type: string
                  description: ''
                  example: consequatur
                  nullable: true
                owner_response:
                  type: string
                  description: ''
                  example: consequatur
                  nullable: true
                property_id:
                  type: string
                  description: 'The <code>id</code> of an existing record in the properties table.'
                  example: consequatur
              required:
                - property_id
      security: []
  '/api/v1/comments/{id}':
    get:
      summary: ''
      operationId: getApiV1CommentsId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    put:
      summary: ''
      operationId: putApiV1CommentsId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                comment:
                  type: string
                  description: ''
                  example: consequatur
                  nullable: true
                owner_response:
                  type: string
                  description: ''
                  example: consequatur
                  nullable: true
                status:
                  type: string
                  description: ''
                  example: pending
                  enum:
                    - pending
                    - approved
                    - rejected
      security: []
    delete:
      summary: ''
      operationId: deleteApiV1CommentsId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the comment.'
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/notifications:
    get:
      summary: ''
      operationId: getApiV1Notifications
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    post:
      summary: ''
      operationId: postApiV1Notifications
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                title:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: vmqeopfuudtdsufvyvddq
                message:
                  type: string
                  description: ''
                  example: consequatur
                payload:
                  type: string
                  description: ''
                  example: consequatur
                  nullable: true
              required:
                - title
                - message
      security: []
  '/api/v1/notifications/{id}':
    get:
      summary: ''
      operationId: getApiV1NotificationsId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    put:
      summary: ''
      operationId: putApiV1NotificationsId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                title:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: vmqeopfuudtdsufvyvddq
                message:
                  type: string
                  description: ''
                  example: consequatur
                payload:
                  type: string
                  description: ''
                  example: consequatur
                  nullable: true
                is_read:
                  type: boolean
                  description: ''
                  example: false
      security: []
    delete:
      summary: ''
      operationId: deleteApiV1NotificationsId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the notification.'
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/chats/conversation_summaries:
    get:
      summary: ''
      operationId: getApiV1ChatsConversation_summaries
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  '/api/v1/chats/messages/{userId}':
    get:
      summary: ''
      operationId: getApiV1ChatsMessagesUserId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: userId
        description: ''
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/chats/send_messages:
    post:
      summary: ''
      operationId: postApiV1ChatsSend_messages
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                sender_id:
                  type: integer
                  description: 'The <code>id</code> of an existing record in the users table.'
                  example: 17
                receiver_id:
                  type: integer
                  description: 'The <code>id</code> of an existing record in the users table.'
                  example: 17
                content:
                  type: string
                  description: ''
                  example: consequatur
                  nullable: true
                attachment:
                  type: string
                  description: ''
                  example: null
                  nullable: true
              required:
                - sender_id
                - receiver_id
      security: []
  '/api/v1/chats/read-message/{messageId}':
    patch:
      summary: ''
      operationId: patchApiV1ChatsReadMessageMessageId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: messageId
        description: ''
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/chats/delete_message/{messageId}':
    delete:
      summary: ''
      operationId: deleteApiV1ChatsDelete_messageMessageId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: messageId
        description: ''
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/chats/typing_status:
    post:
      summary: ''
      operationId: postApiV1ChatsTyping_status
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/dashboard/reservations/pending:
    get:
      summary: ''
      operationId: getApiV1DashboardReservationsPending
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  '/api/v1/dashboard/properties/{propertyId}/booking-rate':
    get:
      summary: ''
      operationId: getApiV1DashboardPropertiesPropertyIdBookingRate
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: propertyId
        description: ''
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/dashboard/properties/{propertyId}/income':
    get:
      summary: ''
      operationId: getApiV1DashboardPropertiesPropertyIdIncome
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: propertyId
        description: ''
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/dashboard/properties/{propertyId}/pending-bookings':
    get:
      summary: ''
      operationId: getApiV1DashboardPropertiesPropertyIdPendingBookings
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: propertyId
        description: ''
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/dashboard/reservations/monthly:
    get:
      summary: ''
      operationId: getApiV1DashboardReservationsMonthly
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/dashboard/finance/weekly:
    get:
      summary: ''
      operationId: getApiV1DashboardFinanceWeekly
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/dashboard/finance/monthly:
    get:
      summary: ''
      operationId: getApiV1DashboardFinanceMonthly
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/dashboard/occupancy-rate/global:
    get:
      summary: ''
      operationId: getApiV1DashboardOccupancyRateGlobal
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  '/api/v1/dashboard/properties/{propertyId}/occupancy-rate':
    get:
      summary: ''
      operationId: getApiV1DashboardPropertiesPropertyIdOccupancyRate
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: propertyId
        description: ''
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/dashboard/properties/{propertyId}/comments':
    get:
      summary: ''
      operationId: getApiV1DashboardPropertiesPropertyIdComments
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: propertyId
        description: ''
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/dashboard/properties/{propertyId}/average-rating':
    get:
      summary: ''
      operationId: getApiV1DashboardPropertiesPropertyIdAverageRating
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: propertyId
        description: ''
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/transactions:
    get:
      summary: ''
      operationId: getApiV1Transactions
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/transactions/export:
    get:
      summary: ''
      operationId: getApiV1TransactionsExport
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/transactions/stats:
    get:
      summary: ''
      operationId: getApiV1TransactionsStats
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/transactions/monthly-summary:
    get:
      summary: ''
      operationId: getApiV1TransactionsMonthlySummary
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  '/api/v1/transactions/{transaction}/refund':
    post:
      summary: ''
      operationId: postApiV1TransactionsTransactionRefund
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: transaction
        description: 'The transaction.'
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/transactions/{transaction}/cancel':
    post:
      summary: ''
      operationId: postApiV1TransactionsTransactionCancel
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: transaction
        description: 'The transaction.'
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/payments/my:
    get:
      summary: ''
      operationId: getApiV1PaymentsMy
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/payments/export:
    get:
      summary: ''
      operationId: getApiV1PaymentsExport
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  '/api/v1/payments/{id}/status':
    patch:
      summary: ''
      operationId: patchApiV1PaymentsIdStatus
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                status:
                  type: string
                  description: ''
                  example: FAILED
                  enum:
                    - EN_ATTENTE
                    - COMPLETED
                    - FAILED
              required:
                - status
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the payment.'
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/payments/{id}':
    delete:
      summary: ''
      operationId: deleteApiV1PaymentsId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    get:
      summary: 'Mini description: Détails d’un paiement (montant, statut, réservation, propriété, utilisateur).'
      operationId: miniDescriptionDtailsDunPaiementmontantStatutRservationPropritUtilisateur
      description: ''
      parameters: []
      responses:
        200:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  id: 101
                  amount: 500.0
                  status: paid
                  reservation:
                    id: 45
                    property:
                      id: 12
                      public_name: 'Villa Océane'
                    user:
                      id: 7
                      name: 'John Doe'
                      email: john@example.com
                properties:
                  id:
                    type: integer
                    example: 101
                  amount:
                    type: number
                    example: 500.0
                  status:
                    type: string
                    example: paid
                  reservation:
                    type: object
                    properties:
                      id:
                        type: integer
                        example: 45
                      property:
                        type: object
                        properties:
                          id:
                            type: integer
                            example: 12
                          public_name:
                            type: string
                            example: 'Villa Océane'
                      user:
                        type: object
                        properties:
                          id:
                            type: integer
                            example: 7
                          name:
                            type: string
                            example: 'John Doe'
                          email:
                            type: string
                            example: john@example.com
        403:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  success: false
                  message: 'Accès refusé'
                properties:
                  success:
                    type: boolean
                    example: false
                  message:
                    type: string
                    example: 'Accès refusé'
        404:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  success: false
                  message: 'Payment not found'
                properties:
                  success:
                    type: boolean
                    example: false
                  message:
                    type: string
                    example: 'Payment not found'
      tags:
        - Paiements
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the payment.'
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/payments/process:
    post:
      summary: ''
      operationId: postApiV1PaymentsProcess
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                reservation_id:
                  type: integer
                  description: 'The <code>id</code> of an existing record in the reservations table.'
                  example: 17
                currency:
                  type: string
                  description: 'Must be 3 characters.'
                  example: mqe
                type:
                  type: string
                  description: ''
                  example: null
              required:
                - reservation_id
                - currency
      security: []
  /api/v1/payments/payments/webhook:
    post:
      summary: ''
      operationId: postApiV1PaymentsPaymentsWebhook
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  '/api/v1/payments/{payment}/receipt':
    get:
      summary: ''
      operationId: getApiV1PaymentsPaymentReceipt
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: payment
        description: 'The payment.'
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/payments/test-webhook/{session_id}':
    post:
      summary: ''
      operationId: postApiV1PaymentsTestWebhookSession_id
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: session_id
        description: 'The ID of the session.'
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/payments/{payment_id}/refund-status':
    get:
      summary: "Vérifier le statut d'un remboursement Stripe"
      operationId: vrifierLeStatutDunRemboursementStripe
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: payment_id
        description: 'The ID of the payment.'
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/payments/finalize/{session_id}':
    post:
      summary: ''
      operationId: postApiV1PaymentsFinalizeSession_id
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: session_id
        description: 'The ID of the session.'
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/cards:
    post:
      summary: ''
      operationId: postApiV1Cards
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                payment_method_id:
                  type: string
                  description: ''
                  example: consequatur
              required:
                - payment_method_id
      security: []
  /api/v1/property-types:
    get:
      summary: ''
      operationId: getApiV1PropertyTypes
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    post:
      summary: ''
      operationId: postApiV1PropertyTypes
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: ''
                  example: consequatur
                description:
                  type: string
                  description: ''
                  example: 'Dolores dolorum amet iste laborum eius est dolor.'
              required:
                - name
      security: []
  '/api/v1/property-types/{id}':
    get:
      summary: ''
      operationId: getApiV1PropertyTypesId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    put:
      summary: ''
      operationId: putApiV1PropertyTypesId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: ''
                  example: consequatur
                description:
                  type: string
                  description: ''
                  example: 'Dolores dolorum amet iste laborum eius est dolor.'
      security: []
    delete:
      summary: ''
      operationId: deleteApiV1PropertyTypesId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the property type.'
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/geographic-restrictions/{restriction_id}/status':
    patch:
      summary: ''
      operationId: patchApiV1GeographicRestrictionsRestriction_idStatus
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                status:
                  type: string
                  description: ''
                  example: review
                  enum:
                    - active
                    - disabled
                    - review
              required:
                - status
      security: []
    parameters:
      -
        in: path
        name: restriction_id
        description: 'The ID of the restriction.'
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/geographic-restrictions/users-dropdown:
    get:
      summary: ''
      operationId: getApiV1GeographicRestrictionsUsersDropdown
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/geographic-restrictions/stats:
    get:
      summary: ''
      operationId: getApiV1GeographicRestrictionsStats
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/geographic-restrictions:
    get:
      summary: ''
      operationId: getApiV1GeographicRestrictions
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    post:
      summary: ''
      operationId: postApiV1GeographicRestrictions
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                restricted_regions:
                  type: array
                  description: 'Must not be greater than 100 characters.'
                  example:
                    - vmqeopfuudtdsufvyvddq
                  items:
                    type: string
                restriction_type:
                  type: string
                  description: ''
                  example: limited_access
                  enum:
                    - access_blocked
                    - conditioned_access
                    - limited_access
                status:
                  type: string
                  description: ''
                  example: disabled
                  enum:
                    - active
                    - disabled
                    - review
                comments:
                  type: string
                  description: 'Must not be greater than 1000 characters.'
                  example: amniihfqcoynlazghdtqt
                  nullable: true
                user_id:
                  type: string
                  description: 'The <code>id</code> of an existing record in the users table.'
                  example: consequatur
              required:
                - restricted_regions
                - restriction_type
                - status
                - user_id
      security: []
  '/api/v1/geographic-restrictions/{id}':
    get:
      summary: ''
      operationId: getApiV1GeographicRestrictionsId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    put:
      summary: ''
      operationId: putApiV1GeographicRestrictionsId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                restricted_regions:
                  type: array
                  description: 'This field is required when <code>restricted_regions</code> is present. Must not be greater than 100 characters.'
                  example:
                    - vmqeopfuudtdsufvyvddq
                  items:
                    type: string
                restriction_type:
                  type: string
                  description: ''
                  example: limited_access
                  enum:
                    - access_blocked
                    - conditioned_access
                    - limited_access
                status:
                  type: string
                  description: ''
                  example: active
                  enum:
                    - active
                    - disabled
                    - review
                comments:
                  type: string
                  description: 'Must not be greater than 1000 characters.'
                  example: amniihfqcoynlazghdtqt
                  nullable: true
      security: []
    delete:
      summary: ''
      operationId: deleteApiV1GeographicRestrictionsId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the geographic restriction.'
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/newsletters/send:
    post:
      summary: ''
      operationId: postApiV1NewslettersSend
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                subject:
                  type: string
                  description: ''
                  example: consequatur
                content:
                  type: string
                  description: ''
                  example: consequatur
              required:
                - subject
                - content
      security: []
  /api/v1/newsletters/subscribe:
    post:
      summary: ''
      operationId: postApiV1NewslettersSubscribe
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                email:
                  type: string
                  description: 'Must be a valid email address.'
                  example: qkunze@example.com
              required:
                - email
      security: []
  /api/v1/newsletters/unsubscribe:
    post:
      summary: ''
      operationId: postApiV1NewslettersUnsubscribe
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                email:
                  type: string
                  description: 'Must be a valid email address. The <code>email</code> of an existing record in the news_letters table.'
                  example: qkunze@example.com
              required:
                - email
      security: []
  /api/v1/dashboard/reservation/booking-rate:
    get:
      summary: ''
      operationId: getApiV1DashboardReservationBookingRate
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/dashboard/reservations/count:
    get:
      summary: ''
      operationId: getApiV1DashboardReservationsCount
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/dashboard/payments-income/count:
    get:
      summary: ''
      operationId: getApiV1DashboardPaymentsIncomeCount
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/dashboard/admin-proprio/count:
    get:
      summary: ''
      operationId: getApiV1DashboardAdminProprioCount
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/dashboard/admin-client/count:
    get:
      summary: ''
      operationId: getApiV1DashboardAdminClientCount
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/dashboard/comments/count:
    get:
      summary: ''
      operationId: getApiV1DashboardCommentsCount
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/payments/reports:
    get:
      summary: ''
      operationId: getApiV1PaymentsReports
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/payments/generate-report:
    post:
      summary: ''
      operationId: postApiV1PaymentsGenerateReport
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                month:
                  type: integer
                  description: 'Must be between 1 and 12.'
                  example: 2
                year:
                  type: string
                  description: 'Must be 4 digits.'
                  example: '8107'
              required:
                - month
                - year
      security: []
  '/api/v1/payments/download-report/{filename}':
    get:
      summary: ''
      operationId: getApiV1PaymentsDownloadReportFilename
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: filename
        description: ''
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/payments/{user_id}/all-payments':
    get:
      summary: ''
      operationId: getApiV1PaymentsUser_idAllPayments
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: user_id
        description: 'The ID of the user.'
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/payments/{user_id}/income-payments':
    get:
      summary: ''
      operationId: getApiV1PaymentsUser_idIncomePayments
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: user_id
        description: 'The ID of the user.'
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/payments/{user_id}/pending-payments':
    get:
      summary: ''
      operationId: getApiV1PaymentsUser_idPendingPayments
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: user_id
        description: 'The ID of the user.'
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/ratings:
    get:
      summary: ''
      operationId: getApiV1Ratings
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/ratings/all-properties:
    get:
      summary: ''
      operationId: getApiV1RatingsAllProperties
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/ratings/user/properties:
    get:
      summary: ''
      operationId: getApiV1RatingsUserProperties
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  '/api/v1/ratings/property/{propertyId}':
    get:
      summary: ''
      operationId: getApiV1RatingsPropertyPropertyId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    post:
      summary: ''
      operationId: postApiV1RatingsPropertyPropertyId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                stars:
                  type: integer
                  description: 'Must be at least 1. Must not be greater than 5.'
                  example: 5
              required:
                - stars
      security: []
    parameters:
      -
        in: path
        name: propertyId
        description: ''
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/ratings/property/{propertyId}/my':
    get:
      summary: ''
      operationId: getApiV1RatingsPropertyPropertyIdMy
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: propertyId
        description: ''
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/ratings/property/{propertyId}/stats':
    get:
      summary: ''
      operationId: getApiV1RatingsPropertyPropertyIdStats
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: propertyId
        description: ''
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/ratings/{id}':
    put:
      summary: ''
      operationId: putApiV1RatingsId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                stars:
                  type: integer
                  description: 'Must be at least 1. Must not be greater than 5.'
                  example: 5
              required:
                - stars
      security: []
    delete:
      summary: ''
      operationId: deleteApiV1RatingsId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the rating.'
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/expenses:
    post:
      summary: ''
      operationId: postApiV1Expenses
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                amount:
                  type: number
                  description: 'Must be at least 0.'
                  example: 73
                description:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: 'Dolorum amet iste laborum eius est dolor.'
                date:
                  type: string
                  description: 'Must be a valid date.'
                  example: '2026-02-03T17:41:58'
                category_name:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: dtdsufvyvddqamniihfqc
                  nullable: true
              required:
                - amount
                - description
                - date
      security: []
    get:
      summary: ''
      operationId: getApiV1Expenses
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/expenses/statistics:
    get:
      summary: ''
      operationId: getApiV1ExpensesStatistics
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  '/api/v1/expenses/{id}':
    get:
      summary: ''
      operationId: getApiV1ExpensesId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    put:
      summary: ''
      operationId: putApiV1ExpensesId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                amount:
                  type: number
                  description: 'Must be at least 0.'
                  example: 73
                  nullable: true
                description:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: 'Dolorum amet iste laborum eius est dolor.'
                  nullable: true
                date:
                  type: string
                  description: 'Must be a valid date.'
                  example: '2026-02-03T17:41:58'
                  nullable: true
                expense_categories_id:
                  type: string
                  description: 'The <code>id</code> of an existing record in the expense_categories table.'
                  example: null
                  nullable: true
      security: []
    delete:
      summary: ''
      operationId: deleteApiV1ExpensesId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the expense.'
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/expense-categories:
    get:
      summary: ''
      operationId: getApiV1ExpenseCategories
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    post:
      summary: ''
      operationId: postApiV1ExpenseCategories
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: 'Must not be greater than 100 characters.'
                  example: vmqeopfuudtdsufvyvddq
              required:
                - name
      security: []
  '/api/v1/expense-categories/{id}':
    get:
      summary: ''
      operationId: getApiV1ExpenseCategoriesId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    put:
      summary: ''
      operationId: putApiV1ExpenseCategoriesId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: ''
                  example: null
      security: []
    delete:
      summary: ''
      operationId: deleteApiV1ExpenseCategoriesId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the expense category.'
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/expense-categories/statistics:
    get:
      summary: ''
      operationId: getApiV1ExpenseCategoriesStatistics
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/incomes/admin-proprio:
    get:
      summary: ''
      operationId: getApiV1IncomesAdminProprio
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/incomes/admin-proprio/payout-status:
    get:
      summary: ''
      operationId: getApiV1IncomesAdminProprioPayoutStatus
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/incomes/support:
    get:
      summary: ''
      operationId: getApiV1IncomesSupport
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/incomes/statistics:
    get:
      summary: ''
      operationId: getApiV1IncomesStatistics
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/incomes/analytics:
    get:
      summary: ''
      operationId: getApiV1IncomesAnalytics
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  '/api/v1/incomes/{id}':
    get:
      summary: "Afficher les détails d'un revenu spécifique"
      operationId: afficherLesDtailsDunRevenuSpcifique
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the income.'
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/withdrawals:
    post:
      summary: ''
      operationId: postApiV1Withdrawals
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                admin_proprio_id:
                  type: string
                  description: 'The <code>id</code> of an existing record in the users table.'
                  example: consequatur
                amount:
                  type: number
                  description: 'Must be at least 10. Must not be greater than 10000.'
                  example: 13
                currency:
                  type: string
                  description: ''
                  example: usd
                  enum:
                    - eur
                    - usd
                description:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: 'Amet iste laborum eius est dolor dolores.'
                  nullable: true
              required:
                - admin_proprio_id
                - amount
                - currency
      security: []
    get:
      summary: ''
      operationId: getApiV1Withdrawals
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  '/api/v1/withdrawals/stripe-connect/{user_id}':
    post:
      summary: ''
      operationId: postApiV1WithdrawalsStripeConnectUser_id
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: user_id
        description: 'The ID of the user.'
        example: 2
        required: true
        schema:
          type: integer
  /api/v1/withdrawals/stripe/return:
    get:
      summary: ''
      operationId: getApiV1WithdrawalsStripeReturn
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/withdrawals/stripe/refresh:
    get:
      summary: ''
      operationId: getApiV1WithdrawalsStripeRefresh
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/balances:
    get:
      summary: ''
      operationId: getApiV1Balances
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/payouts/eligible-owners:
    get:
      summary: 'Récupérer la liste des propriétaires éligibles'
      operationId: rcuprerLaListeDesPropritairesligibles
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                currency:
                  type: string
                  description: ''
                  example: eur
                  enum:
                    - eur
                    - usd
                    - gbp
                min_amount:
                  type: number
                  description: 'Must be at least 0.'
                  example: 73
      security: []
  /api/v1/payouts/all-eligible-owners:
    get:
      summary: 'Récupérer TOUS les propriétaires éligibles (toutes devises) avec conversion'
      operationId: rcuprerTOUSLesPropritairesligiblestoutesDevisesAvecConversion
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                display_currency:
                  type: string
                  description: ''
                  example: aed
                  enum:
                    - eur
                    - usd
                    - gbp
                    - aed
                min_amount:
                  type: number
                  description: 'Must be at least 0.'
                  example: 73
      security: []
  /api/v1/payouts/process:
    post:
      summary: 'Déclencher un payout automatique'
      operationId: dclencherUnPayoutAutomatique
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                min_amount:
                  type: number
                  description: 'Must be at least 1.'
                  example: 73
                max_payouts:
                  type: integer
                  description: 'Must be at least 1. Must not be greater than 1000.'
                  example: 13
                currency:
                  type: string
                  description: ''
                  example: eur
                  enum:
                    - eur
                    - usd
                    - gbp
                dry_run:
                  type: boolean
                  description: ''
                  example: false
      security: []
  /api/v1/payouts/stats:
    get:
      summary: 'Obtenir les statistiques des payouts'
      operationId: obtenirLesStatistiquesDesPayouts
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                start_date:
                  type: string
                  description: 'Must be a valid date.'
                  example: '2026-02-03T17:41:59'
                end_date:
                  type: string
                  description: 'Must be a valid date.'
                  example: '2026-02-03T17:41:59'
      security: []
  '/api/v1/payouts/validate-owner/{owner_id}':
    post:
      summary: 'Valider un propriétaire pour un payout'
      operationId: validerUnPropritairePourUnPayout
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                currency:
                  type: string
                  description: ''
                  example: gbp
                  enum:
                    - eur
                    - usd
                    - gbp
      security: []
    parameters:
      -
        in: path
        name: owner_id
        description: 'The ID of the owner.'
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/payouts/settings:
    get:
      summary: 'Récupérer les paramètres de payout actuels'
      operationId: rcuprerLesParamtresDePayoutActuels
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    put:
      summary: 'Mettre à jour les paramètres de payout'
      operationId: mettreJourLesParamtresDePayout
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                min_amount:
                  type: number
                  description: 'Must be at least 1.'
                  example: 73
                max_payouts:
                  type: integer
                  description: 'Must be at least 1. Must not be greater than 1000.'
                  example: 13
                currency:
                  type: string
                  description: ''
                  example: usd
                  enum:
                    - eur
                    - usd
                    - gbp
      security: []
  '/api/v1/reservations/{reservation}/host-cancel':
    post:
      summary: ''
      operationId: postApiV1ReservationsReservationHostCancel
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                reason:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: vmqeopfuudtdsufvyvddq
              required:
                - reason
      security: []
    parameters:
      -
        in: path
        name: reservation
        description: 'The reservation.'
        example: 2
        required: true
        schema:
          type: integer
  /api/v1/host/cancellations/stats:
    get:
      summary: ''
      operationId: getApiV1HostCancellationsStats
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/host/cancellations/penalties:
    get:
      summary: ''
      operationId: getApiV1HostCancellationsPenalties
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/maintenances:
    get:
      summary: ''
      operationId: getApiV1Maintenances
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    post:
      summary: ''
      operationId: postApiV1Maintenances
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                property_id:
                  type: string
                  description: 'The <code>id</code> of an existing record in the properties table.'
                  example: consequatur
                user_id:
                  type: string
                  description: 'The <code>id</code> of an existing record in the users table.'
                  example: consequatur
                kind:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: mqeopfuudtdsufvyvddqa
                description:
                  type: string
                  description: ''
                  example: 'Dolores dolorum amet iste laborum eius est dolor.'
                  nullable: true
                emergency:
                  type: string
                  description: ''
                  example: urgent
                  enum:
                    - high
                    - urgent
                    - important
                    - medium
                status:
                  type: string
                  description: ''
                  example: in_progress
                  enum:
                    - in_progress
                    - completed
                reported_at:
                  type: string
                  description: 'Must be a valid date.'
                  example: '2026-02-03T17:42:00'
              required:
                - property_id
                - user_id
                - kind
                - emergency
                - status
                - reported_at
      security: []
  '/api/v1/maintenances/{id}':
    get:
      summary: ''
      operationId: getApiV1MaintenancesId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    put:
      summary: ''
      operationId: putApiV1MaintenancesId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                kind:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: vmqeopfuudtdsufvyvddq
                description:
                  type: string
                  description: ''
                  example: 'Dolores dolorum amet iste laborum eius est dolor.'
                  nullable: true
                emergency:
                  type: string
                  description: ''
                  example: important
                  enum:
                    - high
                    - urgent
                    - important
                    - medium
                status:
                  type: string
                  description: ''
                  example: completed
                  enum:
                    - in_progress
                    - completed
                reported_at:
                  type: string
                  description: 'Must be a valid date.'
                  example: '2026-02-03T17:42:00'
      security: []
    delete:
      summary: ''
      operationId: deleteApiV1MaintenancesId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the maintenance.'
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/maintenances/by-property/{property_id}':
    get:
      summary: ''
      operationId: getApiV1MaintenancesByPropertyProperty_id
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: property_id
        description: 'The ID of the property.'
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/rapports_taxe:
    get:
      summary: ''
      operationId: getApiV1Rapports_taxe
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/rapports_taxe/export-csv:
    get:
      summary: ''
      operationId: getApiV1Rapports_taxeExportCsv
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/rapports_taxe/export-pdf:
    get:
      summary: ''
      operationId: getApiV1Rapports_taxeExportPdf
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/marketplaces/user_info_key:
    get:
      summary: ''
      operationId: getApiV1MarketplacesUser_info_key
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/marketplaces/user_property_key:
    get:
      summary: ''
      operationId: getApiV1MarketplacesUser_property_key
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/marketplaces/user_reservations_key:
    get:
      summary: ''
      operationId: getApiV1MarketplacesUser_reservations_key
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/marketplaces/user_payments_key:
    get:
      summary: ''
      operationId: getApiV1MarketplacesUser_payments_key
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  '/api/v1/marketplaces/info_user/{key}':
    get:
      summary: ''
      operationId: getApiV1MarketplacesInfo_userKey
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: key
        description: ''
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/marketplaces/user_property/{key}':
    get:
      summary: ''
      operationId: getApiV1MarketplacesUser_propertyKey
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: key
        description: ''
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/marketplaces/user_reservations/{key}':
    get:
      summary: ''
      operationId: getApiV1MarketplacesUser_reservationsKey
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: key
        description: ''
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/marketplaces/user_payments/{key}':
    get:
      summary: ''
      operationId: getApiV1MarketplacesUser_paymentsKey
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: key
        description: ''
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/properties/properties/grouped-by-location:
    get:
      summary: ''
      operationId: getApiV1PropertiesPropertiesGroupedByLocation
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/privacy-terms:
    get:
      summary: ''
      operationId: getApiV1PrivacyTerms
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    post:
      summary: ''
      operationId: postApiV1PrivacyTerms
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/privacy-terms/for-user:
    get:
      summary: ''
      operationId: getApiV1PrivacyTermsForUser
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  '/api/v1/privacy-terms/{id}':
    put:
      summary: ''
      operationId: putApiV1PrivacyTermsId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    delete:
      summary: ''
      operationId: deleteApiV1PrivacyTermsId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the privacy term.'
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/smart-locks/providers:
    get:
      summary: ''
      operationId: getApiV1SmartLocksProviders
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  '/api/v1/smart-locks/providers/{id}':
    get:
      summary: ''
      operationId: getApiV1SmartLocksProvidersId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the provider.'
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/smart-locks/providers/{providerId}/connect':
    post:
      summary: ''
      operationId: postApiV1SmartLocksProvidersProviderIdConnect
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: providerId
        description: ''
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/smart-locks/providers/{providerId}/sync-locks':
    post:
      summary: ''
      operationId: postApiV1SmartLocksProvidersProviderIdSyncLocks
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: providerId
        description: ''
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/smart-locks/locks:
    get:
      summary: ''
      operationId: getApiV1SmartLocksLocks
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    post:
      summary: ''
      operationId: postApiV1SmartLocksLocks
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  '/api/v1/smart-locks/locks/{id}':
    get:
      summary: ''
      operationId: getApiV1SmartLocksLocksId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    put:
      summary: ''
      operationId: putApiV1SmartLocksLocksId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    delete:
      summary: ''
      operationId: deleteApiV1SmartLocksLocksId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the lock.'
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/smart-locks/locks/{lockId}/access-codes':
    get:
      summary: ''
      operationId: getApiV1SmartLocksLocksLockIdAccessCodes
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    post:
      summary: ''
      operationId: postApiV1SmartLocksLocksLockIdAccessCodes
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: lockId
        description: ''
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/smart-locks/locks/{lockId}/access-codes/{accessCodeId}':
    delete:
      summary: ''
      operationId: deleteApiV1SmartLocksLocksLockIdAccessCodesAccessCodeId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: lockId
        description: ''
        example: consequatur
        required: true
        schema:
          type: string
      -
        in: path
        name: accessCodeId
        description: ''
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/smart-locks/locks/{lockId}/access-logs':
    get:
      summary: ''
      operationId: getApiV1SmartLocksLocksLockIdAccessLogs
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: lockId
        description: ''
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/smart-locks/nuki/smartlocks/{connectionId}':
    get:
      summary: ''
      operationId: getApiV1SmartLocksNukiSmartlocksConnectionId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: connectionId
        description: ''
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/smart-locks/nuki/smartlocks/{smartLockId}/state':
    get:
      summary: ''
      operationId: getApiV1SmartLocksNukiSmartlocksSmartLockIdState
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: smartLockId
        description: ''
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/smart-locks/nuki/smartlocks/{smartLockId}/lock':
    post:
      summary: ''
      operationId: postApiV1SmartLocksNukiSmartlocksSmartLockIdLock
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: smartLockId
        description: ''
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/smart-locks/nuki/smartlocks/{smartLockId}/unlock':
    post:
      summary: ''
      operationId: postApiV1SmartLocksNukiSmartlocksSmartLockIdUnlock
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: smartLockId
        description: ''
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/smart-locks/nuki/smartlocks/{smartLockId}/access-codes':
    get:
      summary: ''
      operationId: getApiV1SmartLocksNukiSmartlocksSmartLockIdAccessCodes
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    post:
      summary: ''
      operationId: postApiV1SmartLocksNukiSmartlocksSmartLockIdAccessCodes
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: smartLockId
        description: ''
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/smart-locks/nuki/smartlocks/{smartLockId}/access-codes/{authId}':
    put:
      summary: ''
      operationId: putApiV1SmartLocksNukiSmartlocksSmartLockIdAccessCodesAuthId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    delete:
      summary: ''
      operationId: deleteApiV1SmartLocksNukiSmartlocksSmartLockIdAccessCodesAuthId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: smartLockId
        description: ''
        example: consequatur
        required: true
        schema:
          type: string
      -
        in: path
        name: authId
        description: ''
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/smart-locks/nuki/smartlocks/{smartLockId}/access-logs':
    get:
      summary: ''
      operationId: getApiV1SmartLocksNukiSmartlocksSmartLockIdAccessLogs
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: smartLockId
        description: ''
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/smart-locks/nuki/smartlocks/{smartLockId}/config':
    get:
      summary: ''
      operationId: getApiV1SmartLocksNukiSmartlocksSmartLockIdConfig
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    put:
      summary: ''
      operationId: putApiV1SmartLocksNukiSmartlocksSmartLockIdConfig
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: smartLockId
        description: ''
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/smart-locks/nuki/account:
    get:
      summary: ''
      operationId: getApiV1SmartLocksNukiAccount
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/smart-locks/nuki/sync:
    post:
      summary: ''
      operationId: postApiV1SmartLocksNukiSync
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  '/api/v1/properties/{propertyId}/smart-lock/status':
    put:
      summary: ''
      operationId: putApiV1PropertiesPropertyIdSmartLockStatus
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: propertyId
        description: ''
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/properties/{propertyId}/smart-lock/sync':
    post:
      summary: ''
      operationId: postApiV1PropertiesPropertyIdSmartLockSync
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: propertyId
        description: ''
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/properties/{propertyId}/smart-lock/reservations/access-code':
    post:
      summary: ''
      operationId: postApiV1PropertiesPropertyIdSmartLockReservationsAccessCode
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    delete:
      summary: ''
      operationId: deleteApiV1PropertiesPropertyIdSmartLockReservationsAccessCode
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: propertyId
        description: ''
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/faqs:
    get:
      summary: ''
      operationId: getApiV1Faqs
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    post:
      summary: ''
      operationId: postApiV1Faqs
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                title:
                  type: string
                  description: ''
                  example: consequatur
                description:
                  type: string
                  description: ''
                  example: consequatur
                role:
                  type: string
                  description: ''
                  example: consequatur
              required:
                - title
                - description
                - role
      security: []
  '/api/v1/faqs/{id}':
    get:
      summary: ''
      operationId: getApiV1FaqsId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    put:
      summary: ''
      operationId: putApiV1FaqsId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                title:
                  type: string
                  description: ''
                  example: consequatur
                description:
                  type: string
                  description: ''
                  example: null
                role:
                  type: string
                  description: ''
                  example: null
      security: []
    delete:
      summary: ''
      operationId: deleteApiV1FaqsId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the faq.'
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/vrbo-connection/channels-list:
    get:
      summary: ''
      operationId: getApiV1VrboConnectionChannelsList
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/vrbo-connection/authenticate:
    post:
      summary: ''
      operationId: postApiV1VrboConnectionAuthenticate
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                username:
                  type: string
                  description: ''
                  example: consequatur
                password:
                  type: string
                  description: ''
                  example: 'O[2UZ5ij-e/dl4m{o,'
              required:
                - username
                - password
      security: []
  /api/v1/espo-contacts:
    get:
      summary: ''
      operationId: getApiV1EspoContacts
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/crm/contacts:
    get:
      summary: "Liste des contacts\nGET /api/v1/crm/contacts"
      operationId: listeDesContactsGETapiv1crmcontacts
      description: 'FILTRAGE: Utilise la table locale espo_contacts pour filtrer par propriétaire'
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    post:
      summary: "Créer un contact\nPOST /api/v1/crm/contacts"
      operationId: crerUnContactPOSTapiv1crmcontacts
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                firstName:
                  type: string
                  description: 'Must not be greater than 100 characters.'
                  example: vmqeopfuudtdsufvyvddq
                lastName:
                  type: string
                  description: 'Must not be greater than 100 characters.'
                  example: amniihfqcoynlazghdtqt
                emailAddress:
                  type: string
                  description: 'Must be a valid email address.'
                  example: andreanne00@example.org
                  nullable: true
                phoneNumber:
                  type: string
                  description: 'Must not be greater than 50 characters.'
                  example: wbpilpmufinllwloauydl
                  nullable: true
                description:
                  type: string
                  description: ''
                  example: 'Dolores dolorum amet iste laborum eius est dolor.'
                  nullable: true
              required:
                - firstName
                - lastName
      security: []
  '/api/v1/crm/contacts/{id}':
    get:
      summary: "Détail d'un contact\nGET /api/v1/crm/contacts/{id}"
      operationId: dtailDunContactGETapiv1crmcontactsid
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    put:
      summary: "Modifier un contact\nPUT /api/v1/crm/contacts/{id}"
      operationId: modifierUnContactPUTapiv1crmcontactsid
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    delete:
      summary: "Supprimer un contact\nDELETE /api/v1/crm/contacts/{id}"
      operationId: supprimerUnContactDELETEapiv1crmcontactsid
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the contact.'
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/crm/contacts/{id}/notes':
    get:
      summary: "Liste des notes d'un contact\nGET /api/v1/crm/contacts/{id}/notes"
      operationId: listeDesNotesDunContactGETapiv1crmcontactsidnotes
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    post:
      summary: "Ajouter une note à un contact\nPOST /api/v1/crm/contacts/{id}/notes"
      operationId: ajouterUneNoteUnContactPOSTapiv1crmcontactsidnotes
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                post:
                  type: string
                  description: ''
                  example: consequatur
              required:
                - post
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the contact.'
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/crm/leads:
    get:
      summary: "Liste des leads de l'utilisateur connecté\nGET /api/v1/crm/leads"
      operationId: listeDesLeadsDeLutilisateurConnectGETapiv1crmleads
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    post:
      summary: "Créer un lead (stocké localement + sync EspoCRM optionnel)\nPOST /api/v1/crm/leads"
      operationId: crerUnLeadstockLocalement+SyncEspoCRMOptionnelPOSTapiv1crmleads
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                firstName:
                  type: string
                  description: 'Must not be greater than 100 characters.'
                  example: vmqeopfuudtdsufvyvddq
                  nullable: true
                lastName:
                  type: string
                  description: 'Must not be greater than 100 characters.'
                  example: amniihfqcoynlazghdtqt
                emailAddress:
                  type: string
                  description: 'Must be a valid email address.'
                  example: andreanne00@example.org
                  nullable: true
                phoneNumber:
                  type: string
                  description: 'Must not be greater than 50 characters.'
                  example: wbpilpmufinllwloauydl
                  nullable: true
                source:
                  type: string
                  description: ''
                  example: consequatur
                  nullable: true
                status:
                  type: string
                  description: ''
                  example: consequatur
                  nullable: true
                description:
                  type: string
                  description: ''
                  example: 'Dolores dolorum amet iste laborum eius est dolor.'
                  nullable: true
              required:
                - lastName
      security: []
  '/api/v1/crm/leads/{id}/convert':
    post:
      summary: "Convertir un lead en contact\nPOST /api/v1/crm/leads/{id}/convert"
      operationId: convertirUnLeadEnContactPOSTapiv1crmleadsidconvert
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the lead.'
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/crm/tasks:
    get:
      summary: "Liste des tâches de l'utilisateur connecté\nGET /api/v1/crm/tasks"
      operationId: listeDesTchesDeLutilisateurConnectGETapiv1crmtasks
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    post:
      summary: "Créer une tâche (stockée localement + sync EspoCRM optionnel)\nPOST /api/v1/crm/tasks"
      operationId: crerUneTchestockeLocalement+SyncEspoCRMOptionnelPOSTapiv1crmtasks
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: vmqeopfuudtdsufvyvddq
                description:
                  type: string
                  description: ''
                  example: 'Dolores dolorum amet iste laborum eius est dolor.'
                  nullable: true
                dateStart:
                  type: string
                  description: 'Must be a valid date.'
                  example: '2026-02-03T17:42:04'
                  nullable: true
                dateEnd:
                  type: string
                  description: 'Must be a valid date.'
                  example: '2026-02-03T17:42:04'
                  nullable: true
                priority:
                  type: string
                  description: ''
                  example: High
                  enum:
                    - Low
                    - Normal
                    - High
                    - Urgent
                  nullable: true
                contactId:
                  type: string
                  description: ''
                  example: consequatur
                  nullable: true
              required:
                - name
      security: []
  '/api/v1/crm/tasks/{id}/complete':
    put:
      summary: "Marquer une tâche comme terminée\nPUT /api/v1/crm/tasks/{id}/complete"
      operationId: marquerUneTcheCommeTerminePUTapiv1crmtasksidcomplete
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the task.'
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/crm/emails/send:
    post:
      summary: "Envoyer un email à un contact\nPOST /api/v1/crm/emails/send"
      operationId: envoyerUnEmailUnContactPOSTapiv1crmemailssend
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                to:
                  type: string
                  description: 'Must be a valid email address.'
                  example: qkunze@example.com
                subject:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: opfuudtdsufvyvddqamni
                body:
                  type: string
                  description: ''
                  example: consequatur
                contactId:
                  type: string
                  description: ''
                  example: consequatur
                  nullable: true
              required:
                - to
                - subject
                - body
      security: []
  /api/v1/crm/stats:
    get:
      summary: "Statistiques CRM de l'utilisateur connecté\nGET /api/v1/crm/stats"
      operationId: statistiquesCRMDeLutilisateurConnectGETapiv1crmstats
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/test-send-me-mail:
    post:
      summary: ''
      operationId: postApiV1TestSendMeMail
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/feedback/comment:
    post:
      summary: ''
      operationId: postApiV1FeedbackComment
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                booking_ref_code:
                  type: string
                  description: 'The <code>booking_ref_code</code> of an existing record in the reservations table.'
                  example: consequatur
                user_email:
                  type: string
                  description: 'Must be a valid email address.'
                  example: carolyne.luettgen@example.org
                comment:
                  type: string
                  description: ''
                  example: consequatur
                  nullable: true
                owner_response:
                  type: string
                  description: ''
                  example: consequatur
                  nullable: true
              required:
                - booking_ref_code
                - user_email
      security: []
  '/api/v1/feedback/rating/{propertyId}':
    post:
      summary: ''
      operationId: postApiV1FeedbackRatingPropertyId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                booking_ref_code:
                  type: string
                  description: 'The <code>booking_ref_code</code> of an existing record in the reservations table.'
                  example: consequatur
                user_email:
                  type: string
                  description: 'Must be a valid email address.'
                  example: carolyne.luettgen@example.org
                stars:
                  type: integer
                  description: 'Must be at least 1. Must not be greater than 5.'
                  example: 2
              required:
                - booking_ref_code
                - user_email
                - stars
      security: []
    parameters:
      -
        in: path
        name: propertyId
        description: ''
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/public-feedback/{bookingRefCode}':
    get:
      summary: '✅ Afficher les infos de la réservation à partir du booking_ref_code'
      operationId: AfficherLesInfosDeLaRservationPartirDuBookingRefCode
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    post:
      summary: '✅ Enregistrer un commentaire et une note publique'
      operationId: EnregistrerUnCommentaireEtUneNotePublique
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                stars:
                  type: integer
                  description: 'Must be at least 1. Must not be greater than 5.'
                  example: 5
                comment:
                  type: string
                  description: 'Must not be greater than 2000 characters.'
                  example: mqeopfuudtdsufvyvddqa
                  nullable: true
                email:
                  type: string
                  description: 'Must be a valid email address.'
                  example: eloisa.harber@example.com
              required:
                - stars
                - email
      security: []
    parameters:
      -
        in: path
        name: bookingRefCode
        description: ''
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/financial-reports:
    get:
      summary: "Liste tous les rapports financiers\nGET /api/financial-reports"
      operationId: listeTousLesRapportsFinanciersGETapifinancialReports
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/financial-reports/summary:
    get:
      summary: "Obtient un résumé des rapports par type\nGET /api/financial-reports/summary"
      operationId: obtientUnRsumDesRapportsParTypeGETapifinancialReportssummary
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/financial-reports/statistics/real-time:
    get:
      summary: "Obtient des statistiques en temps réel (sans créer de rapport)\nGET /api/financial-reports/statistics/real-time"
      operationId: obtientDesStatistiquesEnTempsRelsansCrerDeRapportGETapifinancialReportsstatisticsrealTime
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                period_start:
                  type: string
                  description: 'Must be a valid date.'
                  example: '2026-02-03T17:42:05'
                period_end:
                  type: string
                  description: 'Must be a valid date. Must be a date after <code>period_start</code>.'
                  example: '2107-03-05'
              required:
                - period_start
                - period_end
      security: []
  /api/v1/financial-reports/generate:
    post:
      summary: "Génère un nouveau rapport financier\nPOST /api/financial-reports/generate"
      operationId: gnreUnNouveauRapportFinancierPOSTapifinancialReportsgenerate
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                report_type:
                  type: string
                  description: ''
                  example: quarterly
                  enum:
                    - daily
                    - weekly
                    - monthly
                    - quarterly
                    - yearly
                    - custom
                period_start:
                  type: string
                  description: 'Must be a valid date.'
                  example: '2026-02-03T17:42:05'
                period_end:
                  type: string
                  description: 'Must be a valid date. Must be a date after <code>period_start</code>.'
                  example: '2107-03-05'
                notes:
                  type: string
                  description: ''
                  example: consequatur
                  nullable: true
              required:
                - report_type
                - period_start
                - period_end
      security: []
  '/api/v1/financial-reports/{id}':
    get:
      summary: "Affiche un rapport financier spécifique\nGET /api/financial-reports/{id}"
      operationId: afficheUnRapportFinancierSpcifiqueGETapifinancialReportsid
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    put:
      summary: "Met à jour un rapport financier\nPUT/PATCH /api/financial-reports/{id}"
      operationId: metJourUnRapportFinancierPUTPATCHapifinancialReportsid
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                notes:
                  type: string
                  description: ''
                  example: consequatur
                  nullable: true
                status:
                  type: string
                  description: ''
                  example: draft
                  enum:
                    - draft
                    - published
                    - archived
                  nullable: true
      security: []
    patch:
      summary: "Met à jour un rapport financier\nPUT/PATCH /api/financial-reports/{id}"
      operationId: metJourUnRapportFinancierPUTPATCHapifinancialReportsid
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                notes:
                  type: string
                  description: ''
                  example: consequatur
                  nullable: true
                status:
                  type: string
                  description: ''
                  example: draft
                  enum:
                    - draft
                    - published
                    - archived
                  nullable: true
      security: []
    delete:
      summary: "Supprime un rapport financier\nDELETE /api/financial-reports/{id}"
      operationId: supprimeUnRapportFinancierDELETEapifinancialReportsid
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the financial report.'
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/financial-reports/{id}/publish':
    post:
      summary: "Publie un rapport financier\nPOST /api/financial-reports/{id}/publish"
      operationId: publieUnRapportFinancierPOSTapifinancialReportsidpublish
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the financial report.'
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/financial-reports/{id}/archive':
    post:
      summary: "Archive un rapport financier\nPOST /api/financial-reports/{id}/archive"
      operationId: archiveUnRapportFinancierPOSTapifinancialReportsidarchive
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the financial report.'
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/ota/booking/test-connection:
    post:
      summary: "Tester la connexion Booking.com via Channex\nCorps attendu (exemple):\n{\n  \"channel\": \"BookingCom\",\n  \"settings\": {\"hotel_id\": \"5868189\"}\n}"
      operationId: testerLaConnexionBookingcomViaChannexCorpsAttenduexemplechannelBookingComsettingshotelId5868189
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                channel:
                  type: string
                  description: ''
                  example: consequatur
                settings:
                  type: object
                  description: ''
                  example: []
                  properties: {  }
              required:
                - channel
                - settings
      security: []
  /api/v1/ota/booking/connection-details:
    post:
      summary: ''
      operationId: postApiV1OtaBookingConnectionDetails
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                channel:
                  type: string
                  description: ''
                  example: consequatur
                settings:
                  type: object
                  description: ''
                  example: []
                  properties: {  }
              required:
                - channel
                - settings
      security: []
  '/api/v1/ota/booking/properties/{propertyId}/connect':
    post:
      summary: 'Crée (ou met à jour) la connexion Booking.com pour une propriété Channex donnée'
      operationId: creouMetJourLaConnexionBookingcomPourUnePropritChannexDonne
      description: "POST body attendu (exemple):\n{\n  \"credentials\": {\n    \"hotel_id\": \"1234567\",          // identifiant Booking.com (fourni par la doc/partenaire)\n    \"legal_entity_id\": \"ABCDEF\",    // si requis\n    \"region\": \"EU\"                   // si requis\n  },\n  \"options\": {\n    \"auto_publish_ari\": true\n  }\n}"
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                credentials:
                  type: object
                  description: ''
                  example: []
                  properties: {  }
                options:
                  type: object
                  description: ''
                  example: []
                  properties:
                    auto_publish_ari:
                      type: boolean
                      description: ''
                      example: false
              required:
                - credentials
      security: []
    parameters:
      -
        in: path
        name: propertyId
        description: ''
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/ota/booking/properties/{propertyId}/map':
    post:
      summary: 'Mappe les Room Types et Rate Plans locaux avec Booking.com via Channex.'
      operationId: mappeLesRoomTypesEtRatePlansLocauxAvecBookingcomViaChannex
      description: "On récupère les `external_id` des ChannexRoomType/ChannexRatePlan et on crée les mappages côté channel.\n\nPOST body (exemple si Booking exige des codes côté OTA):\n{\n  \"mappings\": [\n    { \"room_type_external_id\": \"RT_abc123\", \"ota_room_code\": \"12345\" },\n    { \"rate_plan_external_id\": \"RP_def456\", \"ota_rate_code\": \"BAR\" }\n  ]\n}"
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                mappings:
                  type: array
                  description: 'Must have at least 1 items.'
                  example:
                    - []
                  items:
                    type: object
                    properties:
                      room_type_external_id:
                        type: string
                        description: ''
                        example: consequatur
                        nullable: true
                      rate_plan_external_id:
                        type: string
                        description: ''
                        example: consequatur
                        nullable: true
                      ota_room_code:
                        type: string
                        description: ''
                        example: consequatur
                        nullable: true
                      ota_rate_code:
                        type: string
                        description: ''
                        example: consequatur
                        nullable: true
              required:
                - mappings
      security: []
    parameters:
      -
        in: path
        name: propertyId
        description: ''
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/ota/booking/properties/{propertyId}/publish-ari':
    post:
      summary: 'Publie Availability / Rates / Restrictions (ARI) vers Booking.com via Channex'
      operationId: publieAvailabilityRatesRestrictionsARIVersBookingcomViaChannex
      description: "Body (exemples simplifiés):\n{\n  \"availability\": [ { ... } ],\n  \"rates\": [ { ... } ]\n}"
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: propertyId
        description: ''
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/ota/booking/properties/{propertyId}/status':
    get:
      summary: 'Récupère le statut de la connexion Booking.com pour une propriété'
      operationId: rcupreLeStatutDeLaConnexionBookingcomPourUneProprit
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: propertyId
        description: ''
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/ota/trip/properties/{propertyId}/connect':
    post:
      summary: "Créer/mettre à jour la connexion Trip.com pour une propriété\nPOST /trip/properties/{propertyId}/connect"
      operationId: crermettreJourLaConnexionTripcomPourUnePropritPOSTtrippropertiespropertyIdconnect
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                hotel_code:
                  type: string
                  description: ''
                  example: consequatur
                group_id:
                  type: string
                  description: 'Must be a valid UUID.'
                  example: 98adc52b-966d-39db-809a-55902ee7228f
                title:
                  type: string
                  description: ''
                  example: consequatur
                is_active:
                  type: boolean
                  description: ''
                  example: true
              required:
                - hotel_code
                - group_id
      security: []
    parameters:
      -
        in: path
        name: propertyId
        description: ''
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/ota/trip/properties/{propertyId}/map':
    post:
      summary: "Mapper Room Types / Rate Plans\nPOST /trip/properties/{propertyId}/map"
      operationId: mapperRoomTypesRatePlansPOSTtrippropertiespropertyIdmap
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                connection_id:
                  type: string
                  description: 'Must be a valid UUID.'
                  example: 66529e01-d113-3473-8d6f-9e11e09332ea
                mappings:
                  type: array
                  description: ''
                  example:
                    - []
                  items:
                    type: object
                    properties:
                      rate_plan_id:
                        type: string
                        description: 'Must be a valid UUID.'
                        example: 66529e01-d113-3473-8d6f-9e11e09332ea
                      rate_plan_code:
                        type: string
                        description: ''
                        example: consequatur
                      room_type_code:
                        type: string
                        description: ''
                        example: consequatur
                      occupancy:
                        type: integer
                        description: ''
                        example: 17
                      primary_occ:
                        type: boolean
                        description: ''
                        example: true
                    required:
                      - rate_plan_id
                      - rate_plan_code
                      - room_type_code
                      - occupancy
                      - primary_occ
              required:
                - connection_id
                - mappings
      security: []
    parameters:
      -
        in: path
        name: propertyId
        description: ''
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/ota/trip/properties/{propertyId}/publish-ari':
    post:
      summary: "Publier ARI (Availability, Rates, Inventory)\nPOST /trip/properties/{propertyId}/publish-ari"
      operationId: publierARIAvailabilityRatesInventoryPOSTtrippropertiespropertyIdpublishAri
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                connection_id:
                  type: string
                  description: 'Must be a valid UUID.'
                  example: 66529e01-d113-3473-8d6f-9e11e09332ea
                start_date:
                  type: string
                  description: 'Must be a valid date.'
                  example: '2026-02-03T17:42:05'
                end_date:
                  type: string
                  description: 'Must be a valid date. Must be a date after <code>start_date</code>.'
                  example: '2107-03-05'
                room_types:
                  type: object
                  description: ''
                  example: []
                  properties: {  }
              required:
                - connection_id
                - start_date
                - end_date
                - room_types
      security: []
    parameters:
      -
        in: path
        name: propertyId
        description: ''
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/ota/trip/properties/{propertyId}/status':
    get:
      summary: "Statut de la connexion\nGET /trip/properties/{propertyId}/status"
      operationId: statutDeLaConnexionGETtrippropertiespropertyIdstatus
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: propertyId
        description: ''
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/ota/hopper-homes/properties/{propertyId}/connect':
    post:
      summary: "Créer/mettre à jour la connexion Hopper's Home pour une propriété\nPOST /api/v1/hopper-homes/properties/{propertyId}/connect"
      operationId: crermettreJourLaConnexionHoppersHomePourUnePropritPOSTapiv1hopperHomespropertiespropertyIdconnect
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                host_email:
                  type: string
                  description: 'Must be a valid email address.'
                  example: qkunze@example.com
                host_name:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: opfuudtdsufvyvddqamni
                auto_publish:
                  type: boolean
                  description: ''
                  example: false
              required:
                - host_email
                - host_name
      security: []
    parameters:
      -
        in: path
        name: propertyId
        description: ''
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/ota/hopper-homes/properties/{propertyId}/listings':
    post:
      summary: "Créer/éditer le listing sur Hopper's Home\nPOST /api/v1/hopper-homes/properties/{propertyId}/listings"
      operationId: crerditerLeListingSurHoppersHomePOSTapiv1hopperHomespropertiespropertyIdlistings
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: propertyId
        description: ''
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/ota/hopper-homes/properties/{propertyId}/pricing':
    post:
      summary: "Configurer la tarification sur Hopper's Home\nPOST /api/v1/hopper-homes/properties/{propertyId}/pricing"
      operationId: configurerLaTarificationSurHoppersHomePOSTapiv1hopperHomespropertiespropertyIdpricing
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                nightly_price:
                  type: number
                  description: 'Must be at least 0.'
                  example: 73
                currency:
                  type: string
                  description: ''
                  example: USD
                  enum:
                    - USD
                cancellation_policy:
                  type: string
                  description: ''
                  example: strict
                  enum:
                    - moderate
                    - strict
                    - non-refundable
                cleaning_fee:
                  type: number
                  description: 'Must be at least 0.'
                  example: 45
                  nullable: true
                additional_guest_fee:
                  type: number
                  description: 'Must be at least 0.'
                  example: 56
                  nullable: true
              required:
                - nightly_price
                - currency
                - cancellation_policy
      security: []
    parameters:
      -
        in: path
        name: propertyId
        description: ''
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/ota/hopper-homes/properties/{propertyId}/availability-rules':
    post:
      summary: "Configurer les règles de disponibilité\nPOST /api/v1/hopper-homes/properties/{propertyId}/availability-rules"
      operationId: configurerLesRglesDeDisponibilitPOSTapiv1hopperHomespropertiespropertyIdavailabilityRules
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                min_stay:
                  type: integer
                  description: 'Must be at least 1.'
                  example: 73
                max_stay:
                  type: integer
                  description: 'Must be at least 1.'
                  example: 45
                  nullable: true
                check_in_days:
                  type: array
                  description: ''
                  example:
                    - sun
                  items:
                    type: string
                    enum:
                      - mon
                      - tue
                      - wed
                      - thu
                      - fri
                      - sat
                      - sun
                min_lead_time_hours:
                  type: integer
                  description: 'Must be at least 0.'
                  example: 56
                  nullable: true
                max_lead_time_days:
                  type: integer
                  description: 'Must be at least 1.'
                  example: 17
                  nullable: true
              required:
                - min_stay
      security: []
    parameters:
      -
        in: path
        name: propertyId
        description: ''
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/ota/hopper-homes/properties/{propertyId}/listings/{listingId}/status':
    post:
      summary: "Activer/désactiver le listing\nPOST /api/v1/hopper-homes/properties/{propertyId}/listings/{listingId}/status"
      operationId: activerdsactiverLeListingPOSTapiv1hopperHomespropertiespropertyIdlistingslistingIdstatus
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                status:
                  type: string
                  description: ''
                  example: inactive
                  enum:
                    - active
                    - inactive
                    - archived
              required:
                - status
      security: []
    parameters:
      -
        in: path
        name: propertyId
        description: ''
        example: consequatur
        required: true
        schema:
          type: string
      -
        in: path
        name: listingId
        description: ''
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/ota/hopper-homes/properties/{propertyId}/status':
    get:
      summary: "Statut de la connexion Hopper's Home\nGET /api/v1/hopper-homes/properties/{propertyId}/status"
      operationId: statutDeLaConnexionHoppersHomeGETapiv1hopperHomespropertiespropertyIdstatus
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: propertyId
        description: ''
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/ota/google-hotel-ads/google-hotel-ads:
    get:
      summary: ''
      operationId: getApiV1OtaGoogleHotelAdsGoogleHotelAds
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    post:
      summary: ''
      operationId: postApiV1OtaGoogleHotelAdsGoogleHotelAds
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                title:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: vmqeopfuudtdsufvyvddq
                group_id:
                  type: string
                  description: 'Must be a valid UUID.'
                  example: 462ee709-6d9f-345a-95e6-76f833111fb8
                properties:
                  type: array
                  description: 'Must be a valid UUID.'
                  example:
                    - 1915c795-5d1c-3def-965b-5abe034dd150
                  items:
                    type: string
                booking_link:
                  type: string
                  description: 'Must be a valid URL.'
                  example: 'http://www.grady.com/aspernatur-natus-earum-quas-dignissimos-perferendis-voluptatibus'
                bathrooms_count:
                  type: integer
                  description: 'Must be at least 0.'
                  example: 21
                  nullable: true
                bedrooms_count:
                  type: integer
                  description: 'Must be at least 0.'
                  example: 26
                  nullable: true
                beds_count:
                  type: integer
                  description: 'Must be at least 1.'
                  example: 12
                rate_plans:
                  type: array
                  description: ''
                  example: null
                  items:
                    type: object
                    nullable: true
                    properties:
                      rate_plan_id:
                        type: string
                        description: 'Must be a valid UUID.'
                        example: 256a184d-8b0c-30c1-bc2a-067c1083249f
                    required:
                      - rate_plan_id
              required:
                - title
                - group_id
                - booking_link
                - beds_count
      security: []
  '/api/v1/ota/google-hotel-ads/google-hotel-ads/{id}':
    put:
      summary: ''
      operationId: putApiV1OtaGoogleHotelAdsGoogleHotelAdsId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                title:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: vmqeopfuudtdsufvyvddq
                group_id:
                  type: string
                  description: 'Must be a valid UUID.'
                  example: 462ee709-6d9f-345a-95e6-76f833111fb8
                properties:
                  type: array
                  description: 'Must be a valid UUID.'
                  example:
                    - 1915c795-5d1c-3def-965b-5abe034dd150
                  items:
                    type: string
                booking_link:
                  type: string
                  description: 'Must be a valid URL.'
                  example: 'http://www.grady.com/aspernatur-natus-earum-quas-dignissimos-perferendis-voluptatibus'
                bathrooms_count:
                  type: integer
                  description: 'Must be at least 0.'
                  example: 21
                  nullable: true
                bedrooms_count:
                  type: integer
                  description: 'Must be at least 0.'
                  example: 26
                  nullable: true
                beds_count:
                  type: integer
                  description: 'Must be at least 1.'
                  example: 12
                is_active:
                  type: boolean
                  description: ''
                  example: false
                rate_plans:
                  type: array
                  description: ''
                  example: null
                  items:
                    type: object
                    nullable: true
                    properties:
                      rate_plan_id:
                        type: string
                        description: 'Must be a valid UUID.'
                        example: 256a184d-8b0c-30c1-bc2a-067c1083249f
                    required:
                      - rate_plan_id
              required:
                - title
                - group_id
                - booking_link
                - beds_count
      security: []
    delete:
      summary: ''
      operationId: deleteApiV1OtaGoogleHotelAdsGoogleHotelAdsId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the google hotel ad.'
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/ota/expedia/expedia:
    get:
      summary: ''
      operationId: getApiV1OtaExpediaExpedia
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    post:
      summary: ''
      operationId: postApiV1OtaExpediaExpedia
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                title:
                  type: string
                  description: ''
                  example: consequatur
                group_id:
                  type: string
                  description: 'Must be a valid UUID.'
                  example: 98adc52b-966d-39db-809a-55902ee7228f
                property_id:
                  type: string
                  description: 'Must be a valid UUID.'
                  example: d48a46b6-3a18-3763-951d-66b7fdb284ae
                hotel_id:
                  type: string
                  description: ''
                  example: consequatur
                min_stay_type:
                  type: string
                  description: ''
                  example: Through
                  enum:
                    - Arrival
                    - Through
                rate_plans:
                  type: array
                  description: ''
                  example:
                    - []
                  items:
                    type: object
                    properties:
                      rate_plan_id:
                        type: string
                        description: 'Must be a valid UUID.'
                        example: 66529e01-d113-3473-8d6f-9e11e09332ea
                      settings:
                        type: object
                        description: ''
                        example: []
                        properties:
                          rate_plan_code:
                            type: integer
                            description: ''
                            example: 17
                          room_type_code:
                            type: integer
                            description: ''
                            example: 17
                          occupancy:
                            type: integer
                            description: ''
                            example: 17
                          pricing_type:
                            type: string
                            description: ''
                            example: consequatur
                          primary_occ:
                            type: boolean
                            description: ''
                            example: false
                        required:
                          - rate_plan_code
                          - room_type_code
                          - occupancy
                          - pricing_type
                          - primary_occ
                    required:
                      - rate_plan_id
              required:
                - title
                - group_id
                - property_id
                - hotel_id
                - min_stay_type
                - rate_plans
      security: []
  '/api/v1/ota/expedia/expedia/{id}':
    put:
      summary: ''
      operationId: putApiV1OtaExpediaExpediaId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                title:
                  type: string
                  description: ''
                  example: consequatur
                group_id:
                  type: string
                  description: 'Must be a valid UUID.'
                  example: 98adc52b-966d-39db-809a-55902ee7228f
                property_id:
                  type: string
                  description: 'Must be a valid UUID.'
                  example: d48a46b6-3a18-3763-951d-66b7fdb284ae
                hotel_id:
                  type: string
                  description: ''
                  example: consequatur
                min_stay_type:
                  type: string
                  description: ''
                  example: Arrival
                  enum:
                    - Arrival
                    - Through
                is_active:
                  type: boolean
                  description: ''
                  example: true
                rate_plans:
                  type: array
                  description: ''
                  example:
                    - []
                  items:
                    type: object
                    properties:
                      rate_plan_id:
                        type: string
                        description: 'Must be a valid UUID.'
                        example: 66529e01-d113-3473-8d6f-9e11e09332ea
                      settings:
                        type: object
                        description: ''
                        example: []
                        properties:
                          rate_plan_code:
                            type: integer
                            description: ''
                            example: 17
                          room_type_code:
                            type: integer
                            description: ''
                            example: 17
                          occupancy:
                            type: integer
                            description: ''
                            example: 17
                          pricing_type:
                            type: string
                            description: ''
                            example: consequatur
                          primary_occ:
                            type: boolean
                            description: ''
                            example: false
                        required:
                          - rate_plan_code
                          - room_type_code
                          - occupancy
                          - pricing_type
                          - primary_occ
                    required:
                      - rate_plan_id
              required:
                - title
                - group_id
                - property_id
                - hotel_id
                - min_stay_type
                - rate_plans
      security: []
    delete:
      summary: ''
      operationId: deleteApiV1OtaExpediaExpediaId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the expedium.'
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/ota/expedia/test-connection:
    post:
      summary: ''
      operationId: postApiV1OtaExpediaTestConnection
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                hotel_id:
                  type: string
                  description: ''
                  example: consequatur
              required:
                - hotel_id
      security: []
  /api/v1/ota/expedia/mapping-details:
    post:
      summary: ''
      operationId: postApiV1OtaExpediaMappingDetails
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                hotel_id:
                  type: string
                  description: ''
                  example: consequatur
              required:
                - hotel_id
      security: []
  /api/v1/ota/expedia/connection-details:
    post:
      summary: ''
      operationId: postApiV1OtaExpediaConnectionDetails
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                hotel_id:
                  type: string
                  description: ''
                  example: consequatur
              required:
                - hotel_id
      security: []
  /api/v1/agoda/map/agoda:
    post:
      summary: 'Récupère le mapping OTA pour Agoda.'
      operationId: rcupreLeMappingOTAPourAgoda
      description: "POST /api/v1/agoda/map/agoda\nBody: { \"hotel_id\": \"xxxx\" }"
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/agoda/create/channel:
    post:
      summary: 'Crée le channel Agoda sur Channex pour une propriété donnée.'
      operationId: creLeChannelAgodaSurChannexPourUnePropritDonne
      description: "POST /api/v1/agoda/create/channel\nBody: { \"group_id\": \"...\", \"property_id\": \"...\", \"hotel_id\": \"...\", \"rate_plans\": [...] }"
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/agoda/connection-details:
    post:
      summary: 'Récupère les détails de connexion Agoda via Channex.'
      operationId: rcupreLesDtailsDeConnexionAgodaViaChannex
      description: "POST /api/v1/agoda/connection-details\nBody: { \"hotel_id\": \"xxxx\" }"
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/traveloka/map/traveloka:
    post:
      summary: 'Récupère le mapping OTA pour Agoda.'
      operationId: rcupreLeMappingOTAPourAgoda
      description: "POST /api/v1/agoda/map/agoda\nBody: { \"hotel_id\": \"xxxx\" }"
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/traveloka/create/channel:
    post:
      summary: 'Crée le channel Agoda sur Channex pour une propriété donnée.'
      operationId: creLeChannelAgodaSurChannexPourUnePropritDonne
      description: "POST /api/v1/agoda/create/channel\nBody: { \"group_id\": \"...\", \"property_id\": \"...\", \"hotel_id\": \"...\", \"rate_plans\": [...] }"
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/traveloka/room-types:
    get:
      summary: "roomTypesOptions\n- Ces deux endpoints attendent un paramètre de query filter[property_id]."
      operationId: roomTypesOptionsCesDeuxEndpointsAttendentUnParamtreDeQueryFilterpropertyId
      description: "- Ils redirigent vers le service qui interroge les endpoints options de Channex.\n- Renvoient 422 si filter.property_id manquant, 500 en cas d'erreur serveur."
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/traveloka/rate-plans:
    get:
      summary: "ratePlansOptions :\n- Ces deux endpoints attendent un paramètre de query filter[property_id]."
      operationId: ratePlansOptionsCesDeuxEndpointsAttendentUnParamtreDeQueryFilterpropertyId
      description: "- Ils redirigent vers le service qui interroge les endpoints options de Channex.\n- Renvoient 422 si filter.property_id manquant, 500 en cas d'erreur serveur."
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/currencies:
    get:
      summary: ''
      operationId: getApiV1Currencies
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/currencies/convert:
    get:
      summary: ''
      operationId: getApiV1CurrenciesConvert
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                amount:
                  type: number
                  description: 'Must be at least 0.'
                  example: 73
                from:
                  type: string
                  description: 'The <code>code</code> of an existing record in the currencies table.'
                  example: consequatur
                to:
                  type: string
                  description: 'The <code>code</code> of an existing record in the currencies table.'
                  example: consequatur
              required:
                - amount
                - from
                - to
      security: []
  /api/v1/currencies/convert-by-id:
    get:
      summary: ''
      operationId: getApiV1CurrenciesConvertById
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                amount:
                  type: number
                  description: 'Must be at least 0.'
                  example: 73
                from_id:
                  type: integer
                  description: 'The <code>id</code> of an existing record in the currencies table.'
                  example: 17
                to_id:
                  type: integer
                  description: 'The <code>id</code> of an existing record in the currencies table.'
                  example: 17
              required:
                - amount
                - from_id
                - to_id
      security: []
  /api/v1/currencies/exchange-rate:
    get:
      summary: ''
      operationId: getApiV1CurrenciesExchangeRate
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                fromCode:
                  type: string
                  description: 'The <code>code</code> of an existing record in the currencies table.'
                  example: consequatur
                toCode:
                  type: string
                  description: 'The <code>code</code> of an existing record in the currencies table.'
                  example: consequatur
              required:
                - fromCode
                - toCode
      security: []
  /api/v1/currencies/default-currency:
    get:
      summary: ''
      operationId: getApiV1CurrenciesDefaultCurrency
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/currencies/active-currency:
    get:
      summary: ''
      operationId: getApiV1CurrenciesActiveCurrency
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/currencies/set-default:
    post:
      summary: ''
      operationId: postApiV1CurrenciesSetDefault
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                currency_code:
                  type: string
                  description: 'The <code>code</code> of an existing record in the currencies table.'
                  example: consequatur
              required:
                - currency_code
      security: []
  /api/v1/currencies/update-rates:
    post:
      summary: ''
      operationId: postApiV1CurrenciesUpdateRates
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/currencies/toggle-status:
    post:
      summary: ''
      operationId: postApiV1CurrenciesToggleStatus
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                currency_code:
                  type: string
                  description: 'The <code>code</code> of an existing record in the currencies table.'
                  example: consequatur
                is_active:
                  type: boolean
                  description: ''
                  example: true
              required:
                - currency_code
                - is_active
      security: []
  /api/v1/document_shared_mail:
    get:
      summary: ''
      operationId: getApiV1Document_shared_mail
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/mail-notifications/categories:
    get:
      summary: "Liste toutes les catégories avec leurs templates\nGET /api/notifications/categories"
      operationId: listeToutesLesCatgoriesAvecLeursTemplatesGETapinotificationscategories
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  '/api/v1/mail-notifications/categories/{categorySlug}/templates':
    get:
      summary: "Liste les templates d'une catégorie avec leurs configurations\nGET /api/notifications/categories/{categorySlug}/templates"
      operationId: listeLesTemplatesDuneCatgorieAvecLeursConfigurationsGETapinotificationscategoriescategorySlugtemplates
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: categorySlug
        description: ''
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/mail-notifications/templates/{id}':
    get:
      summary: "Récupère les détails d'un template spécifique\nGET /api/notifications/templates/{id}"
      operationId: rcupreLesDtailsDunTemplateSpcifiqueGETapinotificationstemplatesid
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the template.'
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/mail-notifications/templates/{id}/toggle':
    patch:
      summary: "Active/Désactive un template\nPATCH /api/notifications/templates/{id}/toggle"
      operationId: activeDsactiveUnTemplatePATCHapinotificationstemplatesidtoggle
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the template.'
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/mail-notifications/templates/{id}/placeholders':
    get:
      summary: "Liste les placeholders disponibles pour un template\nGET /api/notifications/templates/{id}/placeholders"
      operationId: listeLesPlaceholdersDisponiblesPourUnTemplateGETapinotificationstemplatesidplaceholders
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the template.'
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/mail-notifications/sent:
    get:
      summary: "Historique des notifications envoyées\nGET /api/notifications/sent"
      operationId: historiqueDesNotificationsEnvoyesGETapinotificationssent
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  '/api/v1/mail-notifications/sent/{id}':
    get:
      summary: "Détails d'une notification envoyée\nGET /api/notifications/sent/{id}"
      operationId: dtailsDuneNotificationEnvoyeGETapinotificationssentid
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the sent.'
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/mail-notifications/sent/{id}/retry':
    post:
      summary: "Renvoyer une notification échouée\nPOST /api/notifications/sent/{id}/retry"
      operationId: renvoyerUneNotificationchouePOSTapinotificationssentidretry
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the sent.'
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/mail-notifications/stats:
    get:
      summary: "Statistiques des notifications\nGET /api/notifications/stats"
      operationId: statistiquesDesNotificationsGETapinotificationsstats
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/job-offers:
    get:
      summary: "Liste des offres d'emploi (Public)\nGET /api/v1/job-offers"
      operationId: listeDesOffresDemploiPublicGETapiv1jobOffers
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    post:
      summary: "Créer une offre d'emploi (Admin)\nPOST /api/v1/job-offers"
      operationId: crerUneOffreDemploiAdminPOSTapiv1jobOffers
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                title:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: vmqeopfuudtdsufvyvddq
                department:
                  type: string
                  description: 'Must not be greater than 100 characters.'
                  example: amniihfqcoynlazghdtqt
                location:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: qxbajwbpilpmufinllwlo
                type:
                  type: string
                  description: 'Must not be greater than 50 characters.'
                  example: auydlsmsjuryvojcybzvr
                experience:
                  type: string
                  description: 'Must not be greater than 100 characters.'
                  example: byickznkygloigmkwxphl
                salary:
                  type: string
                  description: 'Must not be greater than 100 characters.'
                  example: vazjrcnfbaqywuxhgjjmz
                description:
                  type: string
                  description: ''
                  example: 'Dolores dolorum amet iste laborum eius est dolor.'
                full_description:
                  type: string
                  description: ''
                  example: consequatur
                responsibilities:
                  type: array
                  description: ''
                  example:
                    - consequatur
                  items:
                    type: string
                requirements:
                  type: array
                  description: ''
                  example:
                    - consequatur
                  items:
                    type: string
                benefits:
                  type: array
                  description: ''
                  example:
                    - consequatur
                  items:
                    type: string
                contact_email:
                  type: string
                  description: 'Must be a valid email address. Must not be greater than 255 characters.'
                  example: carolyne.luettgen@example.org
                contact_phone:
                  type: string
                  description: 'Must not be greater than 50 characters.'
                  example: fuudtdsufvyvddqamniih
                  nullable: true
                contact_name:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: fqcoynlazghdtqtqxbajw
                  nullable: true
                is_active:
                  type: boolean
                  description: ''
                  example: true
                  nullable: true
                expires_at:
                  type: string
                  description: 'Must be a valid date.'
                  example: '2026-02-03T17:42:12'
                  nullable: true
              required:
                - title
                - department
                - location
                - type
                - experience
                - salary
                - description
                - full_description
                - contact_email
      security: []
  '/api/v1/job-offers/{jobOffer_id}':
    get:
      summary: "Détails d'une offre d'emploi (Public)\nGET /api/v1/job-offers/{id}"
      operationId: dtailsDuneOffreDemploiPublicGETapiv1jobOffersid
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: jobOffer_id
        description: 'The ID of the jobOffer.'
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/job-applications/job-offers/{jobOffer_id}':
    post:
      summary: 'Postuler à une offre'
      operationId: postulerUneOffre
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                full_name:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: vmqeopfuudtdsufvyvddq
                email:
                  type: string
                  description: 'Must be a valid email address. Must not be greater than 255 characters.'
                  example: kunde.eloisa@example.com
                phone:
                  type: string
                  description: 'Must not be greater than 20 characters.'
                  example: hfqcoynlazghdtqtq
                cover_letter:
                  type: string
                  description: 'Must not be greater than 5000 characters.'
                  example: xbajwbpilpmufinllwloa
                  nullable: true
                cv:
                  type: string
                  format: binary
                  description: 'Must be a file. Must not be greater than 5120 kilobytes.'
              required:
                - full_name
                - email
                - phone
                - cv
      security: []
    parameters:
      -
        in: path
        name: jobOffer_id
        description: 'The ID of the jobOffer.'
        example: 3
        required: true
        schema:
          type: integer
  /api/v1/job-applications/my-applications:
    get:
      summary: 'Mes candidatures (utilisateur connecté)'
      operationId: mesCandidaturesutilisateurConnect
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/admin/job-offers/store:
    post:
      summary: "Créer une offre d'emploi (Admin)\nPOST /api/v1/job-offers"
      operationId: crerUneOffreDemploiAdminPOSTapiv1jobOffers
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                title:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: vmqeopfuudtdsufvyvddq
                department:
                  type: string
                  description: 'Must not be greater than 100 characters.'
                  example: amniihfqcoynlazghdtqt
                location:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: qxbajwbpilpmufinllwlo
                type:
                  type: string
                  description: 'Must not be greater than 50 characters.'
                  example: auydlsmsjuryvojcybzvr
                experience:
                  type: string
                  description: 'Must not be greater than 100 characters.'
                  example: byickznkygloigmkwxphl
                salary:
                  type: string
                  description: 'Must not be greater than 100 characters.'
                  example: vazjrcnfbaqywuxhgjjmz
                description:
                  type: string
                  description: ''
                  example: 'Dolores dolorum amet iste laborum eius est dolor.'
                full_description:
                  type: string
                  description: ''
                  example: consequatur
                responsibilities:
                  type: array
                  description: ''
                  example:
                    - consequatur
                  items:
                    type: string
                requirements:
                  type: array
                  description: ''
                  example:
                    - consequatur
                  items:
                    type: string
                benefits:
                  type: array
                  description: ''
                  example:
                    - consequatur
                  items:
                    type: string
                contact_email:
                  type: string
                  description: 'Must be a valid email address. Must not be greater than 255 characters.'
                  example: carolyne.luettgen@example.org
                contact_phone:
                  type: string
                  description: 'Must not be greater than 50 characters.'
                  example: fuudtdsufvyvddqamniih
                  nullable: true
                contact_name:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: fqcoynlazghdtqtqxbajw
                  nullable: true
                is_active:
                  type: boolean
                  description: ''
                  example: true
                  nullable: true
                expires_at:
                  type: string
                  description: 'Must be a valid date.'
                  example: '2026-02-03T17:42:08'
                  nullable: true
              required:
                - title
                - department
                - location
                - type
                - experience
                - salary
                - description
                - full_description
                - contact_email
      security: []
  '/api/v1/admin/job-offers/{jobOffer_id}':
    put:
      summary: "Modifier une offre d'emploi (Admin)\nPUT /api/v1/job-offers/{id}"
      operationId: modifierUneOffreDemploiAdminPUTapiv1jobOffersid
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                title:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: vmqeopfuudtdsufvyvddq
                department:
                  type: string
                  description: 'Must not be greater than 100 characters.'
                  example: amniihfqcoynlazghdtqt
                location:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: qxbajwbpilpmufinllwlo
                type:
                  type: string
                  description: 'Must not be greater than 50 characters.'
                  example: auydlsmsjuryvojcybzvr
                experience:
                  type: string
                  description: 'Must not be greater than 100 characters.'
                  example: byickznkygloigmkwxphl
                salary:
                  type: string
                  description: 'Must not be greater than 100 characters.'
                  example: vazjrcnfbaqywuxhgjjmz
                description:
                  type: string
                  description: ''
                  example: 'Dolores dolorum amet iste laborum eius est dolor.'
                full_description:
                  type: string
                  description: ''
                  example: consequatur
                responsibilities:
                  type: array
                  description: ''
                  example:
                    - consequatur
                  items:
                    type: string
                requirements:
                  type: array
                  description: ''
                  example:
                    - consequatur
                  items:
                    type: string
                benefits:
                  type: array
                  description: ''
                  example:
                    - consequatur
                  items:
                    type: string
                contact_email:
                  type: string
                  description: 'Must be a valid email address. Must not be greater than 255 characters.'
                  example: carolyne.luettgen@example.org
                contact_phone:
                  type: string
                  description: 'Must not be greater than 50 characters.'
                  example: fuudtdsufvyvddqamniih
                  nullable: true
                contact_name:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: fqcoynlazghdtqtqxbajw
                  nullable: true
                is_new:
                  type: boolean
                  description: ''
                  example: true
                  nullable: true
                is_active:
                  type: boolean
                  description: ''
                  example: false
                  nullable: true
                expires_at:
                  type: string
                  description: 'Must be a valid date.'
                  example: '2026-02-03T17:42:08'
                  nullable: true
      security: []
    delete:
      summary: "Supprimer une offre d'emploi (Admin)\nDELETE /api/v1/job-offers/{id}"
      operationId: supprimerUneOffreDemploiAdminDELETEapiv1jobOffersid
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: jobOffer_id
        description: 'The ID of the jobOffer.'
        example: 3
        required: true
        schema:
          type: integer
  /api/v1/admin/applications:
    get:
      summary: 'Liste toutes les candidatures (admin uniquement)'
      operationId: listeToutesLesCandidaturesadminUniquement
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  '/api/v1/admin/applications/job-offers/{jobOffer_id}':
    get:
      summary: "Candidatures d'une offre spécifique (admin uniquement)"
      operationId: candidaturesDuneOffreSpcifiqueadminUniquement
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: jobOffer_id
        description: 'The ID of the jobOffer.'
        example: 3
        required: true
        schema:
          type: integer
  '/api/v1/admin/applications/{application_id}':
    get:
      summary: 'Afficher une candidature spécifique (admin uniquement)'
      operationId: afficherUneCandidatureSpcifiqueadminUniquement
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    delete:
      summary: 'Supprimer une candidature (admin uniquement)'
      operationId: supprimerUneCandidatureadminUniquement
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: application_id
        description: 'The ID of the application.'
        example: 17
        required: true
        schema:
          type: integer
  /api/v1/documents:
    get:
      summary: 'Liste tous les documents disponibles'
      operationId: listeTousLesDocumentsDisponibles
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  '/api/v1/documents/{filename}':
    get:
      summary: "Récupère les informations d'un document spécifique"
      operationId: rcupreLesInformationsDunDocumentSpcifique
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: filename
        description: ''
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/onlyoffice/editor:
    post:
      summary: "Génère la configuration pour l'éditeur OnlyOffice (pour iframe)"
      operationId: gnreLaConfigurationPourLditeurOnlyOfficepourIframe
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                file_url:
                  type: string
                  description: "'file_url' n'est plus strictement requis si on passe un document_id valide. Must be a valid URL."
                  example: 'http://kunze.biz/iste-laborum-eius-est-dolor.html'
                  nullable: true
                mode:
                  type: string
                  description: ''
                  example: view
                  enum:
                    - edit
                    - view
                document_id:
                  type: string
                  description: ''
                  example: consequatur
              required:
                - document_id
      security: []
  /api/v1/onlyoffice/iframe:
    get:
      summary: "Génère une URL complète pour l'iframe OnlyOffice"
      operationId: gnreUneURLCompltePourLiframeOnlyOffice
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                file_url:
                  type: string
                  description: 'Must be a valid URL.'
                  example: 'http://kunze.biz/iste-laborum-eius-est-dolor.html'
                  nullable: true
                mode:
                  type: string
                  description: ''
                  example: edit
                  enum:
                    - edit
                    - view
                document_id:
                  type: string
                  description: ''
                  example: consequatur
              required:
                - document_id
      security: []
  /api/v1/onlyoffice/script:
    get:
      summary: 'Proxy pour le script OnlyOffice (évite les problèmes CORS)'
      operationId: proxyPourLeScriptOnlyOfficeviteLesProblmesCORS
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/onlyoffice/callback:
    post:
      summary: 'Callback OnlyOffice pour recevoir les modifications du document'
      operationId: callbackOnlyOfficePourRecevoirLesModificationsDuDocument
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  '/api/v1/document_pdf/{filename}':
    get:
      summary: "Servir les documents du dossier public/document_pdf\nCette route permet à OnlyOffice d'accéder aux documents"
      operationId: servirLesDocumentsDuDossierPublicdocumentPdfCetteRoutePermetOnlyOfficeDaccderAuxDocuments
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: filename
        description: ''
        example: 2UZ5i
        required: true
        schema:
          type: string
  '/api/v1/onlyoffice/document/{id}':
    get:
      summary: "Servir un document par son ID (pour OnlyOffice)\nCette route permet à OnlyOffice d'accéder aux documents stockés dans storage"
      operationId: servirUnDocumentParSonIDpourOnlyOfficeCetteRoutePermetOnlyOfficeDaccderAuxDocumentsStocksDansStorage
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the document.'
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/documents/share/{token}':
    get:
      summary: 'Ouvrir un document partagé via un lien public dans OnlyOffice.'
      operationId: ouvrirUnDocumentPartagViaUnLienPublicDansOnlyOffice
      description: 'GET /api/v1/documents/share/{token}'
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: token
        description: ''
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/nextcloud/account/create:
    post:
      summary: "Créer un compte Nextcloud pour l'utilisateur connecté"
      operationId: crerUnCompteNextcloudPourLutilisateurConnect
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/nextcloud/account:
    get:
      summary: 'Obtenir les informations du compte Nextcloud'
      operationId: obtenirLesInformationsDuCompteNextcloud
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/nextcloud/account/credentials:
    get:
      summary: "Obtenir les informations d'authentification pour se connecter à Nextcloud"
      operationId: obtenirLesInformationsDauthentificationPourSeConnecterNextcloud
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/nextcloud/folder:
    post:
      summary: 'Créer un dossier dans Nextcloud'
      operationId: crerUnDossierDansNextcloud
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                folder_name:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: vmqeopfuudtdsufvyvddq
              required:
                - folder_name
      security: []
  /api/v1/nextcloud/upload:
    post:
      summary: 'Upload un fichier vers Nextcloud'
      operationId: uploadUnFichierVersNextcloud
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                file:
                  type: string
                  format: binary
                  description: 'Must be a file. Must not be greater than 102400 kilobytes.'
                path:
                  type: string
                  description: '100 MB max.'
                  example: consequatur
                  nullable: true
              required:
                - file
      security: []
  /api/v1/nextcloud/share:
    post:
      summary: 'Créer un lien de partage public'
      operationId: crerUnLienDePartagePublic
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                path:
                  type: string
                  description: ''
                  example: consequatur
              required:
                - path
      security: []
  /api/v1/nextcloud/redirect:
    get:
      summary: 'Redirection vers Nextcloud avec auto-login (nouvel onglet)'
      operationId: redirectionVersNextcloudAvecAutoLoginnouvelOnglet
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/nextcloud/generate-link:
    post:
      summary: "⭐ NOUVELLE API : Générer un lien d'accès unique"
      operationId: NOUVELLEAPIGnrerUnLienDaccsUnique
      description: "POST /api/v1/nextcloud/generate-link\n\nRetourne un lien que le frontend peut utiliser\nLe client clique sur ce lien et est redirigé vers Nextcloud"
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/nextcloud/documents:
    get:
      summary: "Lister les documents Nextcloud de l'utilisateur"
      operationId: listerLesDocumentsNextcloudDeLutilisateur
      description: 'GET /api/v1/nextcloud/documents'
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/nextcloud/documents/open:
    post:
      summary: 'Ouvrir un document dans OnlyOffice'
      operationId: ouvrirUnDocumentDansOnlyOffice
      description: "POST /api/v1/nextcloud/documents/open\nBody: { \"file_path\": \"/Documents/fichier.docx\" }"
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                file_path:
                  type: string
                  description: ''
                  example: consequatur
              required:
                - file_path
      security: []
  /api/v1/nextcloud/documents/editor:
    get:
      summary: 'Générer une page HTML avec OnlyOffice intégré'
      operationId: gnrerUnePageHTMLAvecOnlyOfficeIntgr
      description: 'GET /api/v1/nextcloud/documents/editor?file_path=/Documents/fichier.docx'
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                file_path:
                  type: string
                  description: ''
                  example: consequatur
              required:
                - file_path
      security: []
  /api/v1/nextcloud/documents/callback:
    post:
      summary: 'Callback OnlyOffice pour la sauvegarde'
      operationId: callbackOnlyOfficePourLaSauvegarde
      description: 'POST /api/v1/nextcloud/documents/callback'
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/oauth/userinfo:
    get:
      summary: 'Endpoint UserInfo pour OAuth2/OIDC'
      operationId: endpointUserInfoPourOAuth2OIDC
      description: "GET /oauth/userinfo\n\nRetourne les informations de l'utilisateur authentifié"
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/nextcloud/sso-redirect:
    get:
      summary: '⭐ Redirection SSO vers Nextcloud (OAuth2)'
      operationId: RedirectionSSOVersNextcloudOAuth2
      description: "GET /api/v1/nextcloud/sso-redirect\n\nRedirige l'utilisateur vers Nextcloud avec authentification SSO automatique"
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/.well-known/openid-configuration:
    get:
      summary: 'Endpoint Discovery pour OpenID Connect'
      operationId: endpointDiscoveryPourOpenIDConnect
      description: "GET /.well-known/openid-configuration\n\nRetourne la configuration OIDC du serveur"
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/oauth/jwks:
    get:
      summary: 'Endpoint JWKS (JSON Web Key Set)'
      operationId: endpointJWKSJSONWebKeySet
      description: "GET /oauth/jwks\n\nRetourne les clés publiques pour vérifier les JWT"
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/job-offers/filters:
    get:
      summary: "Récupérer les filtres disponibles (Public)\nGET /api/v1/job-offers/filters"
      operationId: rcuprerLesFiltresDisponiblesPublicGETapiv1jobOffersfilters
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  '/api/v1/job-offers/{id}':
    get:
      summary: "Détails d'une offre d'emploi (Public)\nGET /api/v1/job-offers/{id}"
      operationId: dtailsDuneOffreDemploiPublicGETapiv1jobOffersid
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    put:
      summary: "Modifier une offre d'emploi (Admin)\nPUT /api/v1/job-offers/{id}"
      operationId: modifierUneOffreDemploiAdminPUTapiv1jobOffersid
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                title:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: vmqeopfuudtdsufvyvddq
                department:
                  type: string
                  description: 'Must not be greater than 100 characters.'
                  example: amniihfqcoynlazghdtqt
                location:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: qxbajwbpilpmufinllwlo
                type:
                  type: string
                  description: 'Must not be greater than 50 characters.'
                  example: auydlsmsjuryvojcybzvr
                experience:
                  type: string
                  description: 'Must not be greater than 100 characters.'
                  example: byickznkygloigmkwxphl
                salary:
                  type: string
                  description: 'Must not be greater than 100 characters.'
                  example: vazjrcnfbaqywuxhgjjmz
                description:
                  type: string
                  description: ''
                  example: 'Dolores dolorum amet iste laborum eius est dolor.'
                full_description:
                  type: string
                  description: ''
                  example: consequatur
                responsibilities:
                  type: array
                  description: ''
                  example:
                    - consequatur
                  items:
                    type: string
                requirements:
                  type: array
                  description: ''
                  example:
                    - consequatur
                  items:
                    type: string
                benefits:
                  type: array
                  description: ''
                  example:
                    - consequatur
                  items:
                    type: string
                contact_email:
                  type: string
                  description: 'Must be a valid email address. Must not be greater than 255 characters.'
                  example: carolyne.luettgen@example.org
                contact_phone:
                  type: string
                  description: 'Must not be greater than 50 characters.'
                  example: fuudtdsufvyvddqamniih
                  nullable: true
                contact_name:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: fqcoynlazghdtqtqxbajw
                  nullable: true
                is_new:
                  type: boolean
                  description: ''
                  example: false
                  nullable: true
                is_active:
                  type: boolean
                  description: ''
                  example: true
                  nullable: true
                expires_at:
                  type: string
                  description: 'Must be a valid date.'
                  example: '2026-02-03T17:42:12'
                  nullable: true
      security: []
    delete:
      summary: "Supprimer une offre d'emploi (Admin)\nDELETE /api/v1/job-offers/{id}"
      operationId: supprimerUneOffreDemploiAdminDELETEapiv1jobOffersid
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the job offer.'
        example: 3
        required: true
        schema:
          type: integer
  /api/v1/annex-services/active:
    get:
      summary: "Liste des services annexes actifs (route publique)\nGET /api/v1/annex-services/active"
      operationId: listeDesServicesAnnexesActifsroutePubliqueGETapiv1annexServicesactive
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/annex-services:
    get:
      summary: "Liste des services annexes disponibles pour l'utilisateur connecté\nGET /api/v1/annex-services"
      operationId: listeDesServicesAnnexesDisponiblesPourLutilisateurConnectGETapiv1annexServices
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    post:
      summary: "Créer un nouveau service annexe (admin)\nPOST /api/v1/annex-services"
      operationId: crerUnNouveauServiceAnnexeadminPOSTapiv1annexServices
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: 'Must not be greater than 100 characters.'
                  example: vmqeopfuudtdsufvyvddq
                description:
                  type: string
                  description: 'Must not be greater than 500 characters.'
                  example: 'Dolores molestias ipsam sit.'
                  nullable: true
                icon:
                  type: string
                  description: 'Must not be greater than 50 characters.'
                  example: hfqcoynlazghdtqtqxbaj
                  nullable: true
                admin_link:
                  type: string
                  description: 'Must not be greater than 500 characters.'
                  example: wbpilpmufinllwloauydl
                  nullable: true
                client_link:
                  type: string
                  description: 'Must not be greater than 500 characters.'
                  example: smsjuryvojcybzvrbyick
                  nullable: true
                is_active:
                  type: boolean
                  description: ''
                  example: true
              required:
                - name
      security: []
  '/api/v1/annex-services/{id}':
    get:
      summary: "Obtenir les détails d'un service spécifique\nGET /api/v1/annex-services/{id}"
      operationId: obtenirLesDtailsDunServiceSpcifiqueGETapiv1annexServicesid
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    put:
      summary: "Mettre à jour un service annexe (admin)\nPUT /api/v1/annex-services/{id}"
      operationId: mettreJourUnServiceAnnexeadminPUTapiv1annexServicesid
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: 'Must not be greater than 100 characters.'
                  example: vmqeopfuudtdsufvyvddq
                description:
                  type: string
                  description: 'Must not be greater than 500 characters.'
                  example: 'Dolores molestias ipsam sit.'
                  nullable: true
                icon:
                  type: string
                  description: 'Must not be greater than 50 characters.'
                  example: hfqcoynlazghdtqtqxbaj
                  nullable: true
                admin_link:
                  type: string
                  description: 'Must not be greater than 500 characters.'
                  example: wbpilpmufinllwloauydl
                  nullable: true
                client_link:
                  type: string
                  description: 'Must not be greater than 500 characters.'
                  example: smsjuryvojcybzvrbyick
                  nullable: true
                is_active:
                  type: boolean
                  description: ''
                  example: true
      security: []
    delete:
      summary: "Supprimer un service annexe (admin)\nDELETE /api/v1/annex-services/{id}"
      operationId: supprimerUnServiceAnnexeadminDELETEapiv1annexServicesid
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the annex service.'
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/annex-services/{id}/toggle-status':
    patch:
      summary: "Activer/désactiver un service (admin)\nPATCH /api/v1/annex-services/{id}/toggle-status"
      operationId: activerdsactiverUnServiceadminPATCHapiv1annexServicesidtoggleStatus
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the annex service.'
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/metabase-dashboards/active:
    get:
      summary: 'Liste des dashboards (pour les propriétaires - uniquement actifs)'
      operationId: listeDesDashboardspourLesPropritairesUniquementActifs
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/metabase-dashboards/admin:
    get:
      summary: 'Liste complète des dashboards (pour le support)'
      operationId: listeComplteDesDashboardspourLeSupport
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/metabase-dashboards:
    post:
      summary: 'Créer un nouveau dashboard'
      operationId: crerUnNouveauDashboard
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: vmqeopfuudtdsufvyvddq
                description:
                  type: string
                  description: ''
                  example: 'Dolores dolorum amet iste laborum eius est dolor.'
                  nullable: true
                dashboard_id:
                  type: integer
                  description: 'Must be at least 1.'
                  example: 13
                is_active:
                  type: boolean
                  description: ''
                  example: true
                sort_order:
                  type: integer
                  description: ''
                  example: 17
              required:
                - name
                - dashboard_id
      security: []
  '/api/v1/metabase-dashboards/{metabaseDashboard_id}':
    get:
      summary: 'Afficher un dashboard'
      operationId: afficherUnDashboard
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    put:
      summary: 'Mettre à jour un dashboard'
      operationId: mettreJourUnDashboard
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: vmqeopfuudtdsufvyvddq
                description:
                  type: string
                  description: ''
                  example: 'Dolores dolorum amet iste laborum eius est dolor.'
                  nullable: true
                dashboard_id:
                  type: integer
                  description: 'Must be at least 1.'
                  example: 13
                is_active:
                  type: boolean
                  description: ''
                  example: false
                sort_order:
                  type: integer
                  description: ''
                  example: 17
      security: []
    delete:
      summary: 'Supprimer un dashboard'
      operationId: supprimerUnDashboard
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: metabaseDashboard_id
        description: 'The ID of the metabaseDashboard.'
        example: 1
        required: true
        schema:
          type: integer
  '/api/v1/metabase-dashboards/{metabaseDashboard_id}/toggle':
    patch:
      summary: 'Activer/Désactiver un dashboard'
      operationId: activerDsactiverUnDashboard
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: metabaseDashboard_id
        description: 'The ID of the metabaseDashboard.'
        example: 1
        required: true
        schema:
          type: integer
  '/api/v1/annex-services/{id}/access-url':
    get:
      summary: "Obtenir l'URL d'accès pour un service spécifique\nGET /api/v1/annex-services/{id}/access-url"
      operationId: obtenirLURLDaccsPourUnServiceSpcifiqueGETapiv1annexServicesidaccessUrl
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the annex service.'
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/mercure/subscribe:
    get:
      summary: 'Génère un JWT Mercure SUBSCRIBER et le place dans un cookie sécurisé'
      operationId: gnreUnJWTMercureSUBSCRIBEREtLePlaceDansUnCookieScuris
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/mercure/unsubscribe:
    post:
      summary: 'Révoque le JWT Mercure en supprimant le cookie'
      operationId: rvoqueLeJWTMercureEnSupprimantLeCookie
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/mercure/status:
    get:
      summary: 'Vérifie le statut de la connexion Mercure'
      operationId: vrifieLeStatutDeLaConnexionMercure
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/metabase/dashboard:
    get:
      summary: "Retourner l'URL d'un dashboard pour le propriétaire connecté\nGET /api/v1/metabase/dashboard?dashboard_id=3"
      operationId: retournerLURLDunDashboardPourLePropritaireConnectGETapiv1metabasedashboarddashboardId3
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/metabase/question:
    get:
      summary: "Retourner l'URL d'une question/chart spécifique\nGET /api/v1/metabase/question?question_id=5"
      operationId: retournerLURLDuneQuestionchartSpcifiqueGETapiv1metabasequestionquestionId5
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  '/api/v1/subscription-plans/{id}':
    put:
      summary: "Met à jour un plan d'abonnement\nPUT /api/v1/subscription-plans/{id}"
      operationId: metJourUnPlanDabonnementPUTapiv1subscriptionPlansid
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: 'Must not be greater than 100 characters.'
                  example: vmqeopfuudtdsufvyvddq
                subtitle:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  example: amniihfqcoynlazghdtqt
                  nullable: true
                base_price_monthly:
                  type: integer
                  description: 'Must be at least 0.'
                  example: 56
                commission_rate:
                  type: number
                  description: 'Must be at least 0. Must not be greater than 100.'
                  example: 23
                max_ota_channels:
                  type: integer
                  description: ''
                  example: 17
                max_properties:
                  type: integer
                  description: ''
                  example: 17
                features:
                  type: object
                  description: ''
                  example: null
                  properties: {  }
                feature_limits:
                  type: object
                  description: ''
                  example: null
                  properties: {  }
                display_order:
                  type: integer
                  description: 'Limites par feature: {feature_slug: limit_value}.'
                  example: 17
                is_active:
                  type: boolean
                  description: ''
                  example: false
                is_popular:
                  type: boolean
                  description: ''
                  example: false
      security: []
    delete:
      summary: "Supprime un plan d'abonnement\nDELETE /api/v1/subscription-plans/{id}"
      operationId: supprimeUnPlanDabonnementDELETEapiv1subscriptionPlansid
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the subscription plan.'
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/subscriptions/admin/create:
    post:
      summary: "ADMIN: Créer un abonnement avec promotions personnalisées\nPOST /api/v1/subscriptions/admin/create"
      operationId: aDMINCrerUnAbonnementAvecPromotionsPersonnalisesPOSTapiv1subscriptionsadmincreate
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                user_id:
                  type: integer
                  description: 'The <code>id</code> of an existing record in the users table.'
                  example: 17
                plan_slug:
                  type: string
                  description: 'The <code>slug</code> of an existing record in the subscription_plans table.'
                  example: consequatur
                billing_period:
                  type: string
                  description: ''
                  example: 2years
                  enum:
                    - monthly
                    - annual
                    - 2years
                properties_count:
                  type: integer
                  description: 'Must be at least 1. Must not be greater than 500.'
                  example: 13
                custom_discount_percent:
                  type: number
                  description: 'Must be at least 0. Must not be greater than 100.'
                  example: 16
                  nullable: true
                custom_free_months:
                  type: integer
                  description: 'Must be at least 0. Must not be greater than 24.'
                  example: 5
                  nullable: true
                start_date:
                  type: string
                  description: 'Must be a valid date. Must be a date after or equal to <code>today</code>.'
                  example: '2107-03-05'
                  nullable: true
                notes:
                  type: string
                  description: 'Must not be greater than 1000 characters.'
                  example: mqeopfuudtdsufvyvddqa
                  nullable: true
              required:
                - user_id
                - plan_slug
                - billing_period
                - properties_count
      security: []
  /api/v1/subscriptions/change-plan:
    post:
      summary: "Change de plan d'abonnement (upgrade/downgrade)\nPOST /api/v1/subscriptions/change-plan"
      operationId: changeDePlanDabonnementupgradedowngradePOSTapiv1subscriptionschangePlan
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                plan_slug:
                  type: string
                  description: 'The <code>slug</code> of an existing record in the subscription_plans table.'
                  example: consequatur
                billing_period:
                  type: string
                  description: ''
                  example: annual
                  enum:
                    - monthly
                    - annual
                    - 2years
                properties_count:
                  type: integer
                  description: 'Must be at least 1.'
                  example: 45
              required:
                - plan_slug
      security: []
  /api/v1/subscriptions/verify-payment:
    get:
      summary: "Vérifie le statut d'une session Checkout et active l'abonnement\nGET /api/v1/subscriptions/verify-payment?session_id=xxx"
      operationId: vrifieLeStatutDuneSessionCheckoutEtActiveLabonnementGETapiv1subscriptionsverifyPaymentsessionIdxxx
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                session_id:
                  type: string
                  description: ''
                  example: consequatur
              required:
                - session_id
      security: []
  /api/v1/subscriptions/reactivate:
    post:
      summary: "Réactive un abonnement annulé\nPOST /api/v1/subscriptions/reactivate"
      operationId: ractiveUnAbonnementAnnulPOSTapiv1subscriptionsreactivate
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/stripe/subscription-webhook:
    post:
      summary: "Webhook Stripe pour traiter les événements d'abonnement\nPOST /api/v1/stripe/subscription-webhook"
      operationId: webhookStripePourTraiterLesvnementsDabonnementPOSTapiv1stripesubscriptionWebhook
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/subscription-payment/verify:
    get:
      summary: "Vérifie le paiement (route publique pour le callback Stripe)\nGET /api/v1/subscription-payment/verify?session_id=xxx"
      operationId: vrifieLePaiementroutePubliquePourLeCallbackStripeGETapiv1subscriptionPaymentverifysessionIdxxx
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                session_id:
                  type: string
                  description: ''
                  example: consequatur
              required:
                - session_id
      security: []
  /api/v1/features/categories:
    get:
      summary: "Liste toutes les catégories avec leurs fonctionnalités\nGET /api/v1/features/categories"
      operationId: listeToutesLesCatgoriesAvecLeursFonctionnalitsGETapiv1featurescategories
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    post:
      summary: "Crée une nouvelle catégorie\nPOST /api/v1/features/categories"
      operationId: creUneNouvelleCatgoriePOSTapiv1featurescategories
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                slug:
                  type: string
                  description: 'Must not be greater than 50 characters.'
                  example: vmqeopfuudtdsufvyvddq
                name:
                  type: string
                  description: 'Must not be greater than 100 characters.'
                  example: amniihfqcoynlazghdtqt
                description:
                  type: string
                  description: ''
                  example: 'Dolores dolorum amet iste laborum eius est dolor.'
                  nullable: true
                icon:
                  type: string
                  description: 'Must not be greater than 50 characters.'
                  example: dtdsufvyvddqamniihfqc
                  nullable: true
                display_order:
                  type: integer
                  description: ''
                  example: 17
              required:
                - slug
                - name
      security: []
  /api/v1/features:
    get:
      summary: "Liste toutes les fonctionnalités\nGET /api/v1/features"
      operationId: listeToutesLesFonctionnalitsGETapiv1features
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    post:
      summary: "Crée une nouvelle fonctionnalité\nPOST /api/v1/features"
      operationId: creUneNouvelleFonctionnalitPOSTapiv1features
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                category_id:
                  type: string
                  description: 'The <code>id</code> of an existing record in the feature_categories table.'
                  example: consequatur
                slug:
                  type: string
                  description: 'Must not be greater than 100 characters.'
                  example: mqeopfuudtdsufvyvddqa
                name:
                  type: string
                  description: 'Must not be greater than 150 characters.'
                  example: mniihfqcoynlazghdtqtq
                description:
                  type: string
                  description: ''
                  example: 'Dolores dolorum amet iste laborum eius est dolor.'
                  nullable: true
                api_route_pattern:
                  type: string
                  description: ''
                  example: consequatur
                  nullable: true
                api_methods:
                  type: array
                  description: ''
                  example:
                    - DELETE
                  items:
                    type: string
                    enum:
                      - GET
                      - POST
                      - PUT
                      - PATCH
                      - DELETE
                is_premium:
                  type: boolean
                  description: ''
                  example: false
                display_order:
                  type: integer
                  description: ''
                  example: 17
              required:
                - category_id
                - slug
                - name
      security: []
  '/api/v1/features/categories/{id}':
    put:
      summary: "Met à jour une catégorie\nPUT /api/v1/features/categories/{id}"
      operationId: metJourUneCatgoriePUTapiv1featurescategoriesid
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: 'Must not be greater than 100 characters.'
                  example: vmqeopfuudtdsufvyvddq
                description:
                  type: string
                  description: ''
                  example: 'Dolores dolorum amet iste laborum eius est dolor.'
                  nullable: true
                icon:
                  type: string
                  description: 'Must not be greater than 50 characters.'
                  example: dtdsufvyvddqamniihfqc
                  nullable: true
                display_order:
                  type: integer
                  description: ''
                  example: 17
                is_active:
                  type: boolean
                  description: ''
                  example: true
      security: []
    delete:
      summary: "Supprime une catégorie\nDELETE /api/v1/features/categories/{id}"
      operationId: supprimeUneCatgorieDELETEapiv1featurescategoriesid
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the category.'
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/features/{id}':
    put:
      summary: "Met à jour une fonctionnalité\nPUT /api/v1/features/{id}"
      operationId: metJourUneFonctionnalitPUTapiv1featuresid
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                category_id:
                  type: string
                  description: 'The <code>id</code> of an existing record in the feature_categories table.'
                  example: null
                name:
                  type: string
                  description: 'Must not be greater than 150 characters.'
                  example: vmqeopfuudtdsufvyvddq
                description:
                  type: string
                  description: ''
                  example: 'Dolores dolorum amet iste laborum eius est dolor.'
                  nullable: true
                api_route_pattern:
                  type: string
                  description: ''
                  example: consequatur
                  nullable: true
                api_methods:
                  type: array
                  description: ''
                  example:
                    - PUT
                  items:
                    type: string
                    enum:
                      - GET
                      - POST
                      - PUT
                      - PATCH
                      - DELETE
                is_premium:
                  type: boolean
                  description: ''
                  example: true
                is_active:
                  type: boolean
                  description: ''
                  example: true
                display_order:
                  type: integer
                  description: ''
                  example: 17
      security: []
    delete:
      summary: "Supprime une fonctionnalité\nDELETE /api/v1/features/{id}"
      operationId: supprimeUneFonctionnalitDELETEapiv1featuresid
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the feature.'
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/subscription-plans/{planId}/features':
    get:
      summary: "Récupère les fonctionnalités d'un plan avec leur configuration\nGET /api/v1/subscription-plans/{planId}/features"
      operationId: rcupreLesFonctionnalitsDunPlanAvecLeurConfigurationGETapiv1subscriptionPlansplanIdfeatures
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    post:
      summary: "Attribue une fonctionnalité à un plan\nPOST /api/v1/subscription-plans/{planId}/features"
      operationId: attribueUneFonctionnalitUnPlanPOSTapiv1subscriptionPlansplanIdfeatures
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                feature_id:
                  type: string
                  description: 'The <code>id</code> of an existing record in the features table.'
                  example: consequatur
                limit_value:
                  type: integer
                  description: 'Must be at least -1.'
                  example: 44
                  nullable: true
                limit_period:
                  type: string
                  description: ''
                  example: yearly
                  enum:
                    - daily
                    - monthly
                    - yearly
                  nullable: true
                allowed_methods:
                  type: array
                  description: ''
                  example:
                    - PATCH
                  items:
                    type: string
                    enum:
                      - GET
                      - POST
                      - PUT
                      - PATCH
                      - DELETE
                restrictions:
                  type: object
                  description: ''
                  example: null
                  properties: {  }
                  nullable: true
                is_enabled:
                  type: boolean
                  description: ''
                  example: false
              required:
                - feature_id
      security: []
    parameters:
      -
        in: path
        name: planId
        description: ''
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/subscription-plans/{planId}/features/{featureId}':
    put:
      summary: "Met à jour la configuration d'une fonctionnalité pour un plan\nPUT /api/v1/subscription-plans/{planId}/features/{featureId}"
      operationId: metJourLaConfigurationDuneFonctionnalitPourUnPlanPUTapiv1subscriptionPlansplanIdfeaturesfeatureId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                limit_value:
                  type: integer
                  description: 'Must be at least -1.'
                  example: 73
                  nullable: true
                limit_period:
                  type: string
                  description: ''
                  example: monthly
                  enum:
                    - daily
                    - monthly
                    - yearly
                  nullable: true
                allowed_methods:
                  type: array
                  description: ''
                  example:
                    - PATCH
                  items:
                    type: string
                    enum:
                      - GET
                      - POST
                      - PUT
                      - PATCH
                      - DELETE
                restrictions:
                  type: object
                  description: ''
                  example: null
                  properties: {  }
                  nullable: true
                is_enabled:
                  type: boolean
                  description: ''
                  example: false
      security: []
    delete:
      summary: "Retire une fonctionnalité d'un plan\nDELETE /api/v1/subscription-plans/{planId}/features/{featureId}"
      operationId: retireUneFonctionnalitDunPlanDELETEapiv1subscriptionPlansplanIdfeaturesfeatureId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: planId
        description: ''
        example: consequatur
        required: true
        schema:
          type: string
      -
        in: path
        name: featureId
        description: ''
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/subscription-plans/{planId}/features/bulk':
    post:
      summary: "Attribution en masse de fonctionnalités à un plan\nPOST /api/v1/subscription-plans/{planId}/features/bulk"
      operationId: attributionEnMasseDeFonctionnalitsUnPlanPOSTapiv1subscriptionPlansplanIdfeaturesbulk
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                features:
                  type: array
                  description: ''
                  example:
                    - []
                  items:
                    type: object
                    properties:
                      feature_id:
                        type: string
                        description: 'The <code>id</code> of an existing record in the features table.'
                        example: consequatur
                      limit_value:
                        type: integer
                        description: 'Must be at least -1.'
                        example: 44
                        nullable: true
                      limit_period:
                        type: string
                        description: ''
                        example: monthly
                        enum:
                          - daily
                          - monthly
                          - yearly
                        nullable: true
                      allowed_methods:
                        type: object
                        description: ''
                        example: null
                        properties: {  }
                        nullable: true
                      is_enabled:
                        type: boolean
                        description: ''
                        example: true
                    required:
                      - feature_id
              required:
                - features
      security: []
    parameters:
      -
        in: path
        name: planId
        description: ''
        example: consequatur
        required: true
        schema:
          type: string
  '/api/v1/subscription-plans/{planId}/features/copy-from/{sourcePlanId}':
    post:
      summary: "Copie les fonctionnalités d'un plan vers un autre\nPOST /api/v1/subscription-plans/{planId}/features/copy-from/{sourcePlanId}"
      operationId: copieLesFonctionnalitsDunPlanVersUnAutrePOSTapiv1subscriptionPlansplanIdfeaturescopyFromsourcePlanId
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: planId
        description: ''
        example: consequatur
        required: true
        schema:
          type: string
      -
        in: path
        name: sourcePlanId
        description: ''
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/features/usage:
    get:
      summary: "Récupère les statistiques d'utilisation de l'utilisateur connecté\nGET /api/v1/features/usage"
      operationId: rcupreLesStatistiquesDutilisationDeLutilisateurConnectGETapiv1featuresusage
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  '/api/v1/features/check/{featureSlug}':
    get:
      summary: "Vérifie si une fonctionnalité peut être utilisée\nGET /api/v1/features/check/{featureSlug}"
      operationId: vrifieSiUneFonctionnalitPeuttreUtiliseGETapiv1featurescheckfeatureSlug
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: featureSlug
        description: ''
        example: hvxi
        required: true
        schema:
          type: string
  /api/v1/features/usage/sync:
    post:
      summary: "Synchronise les compteurs avec la base de données\nPOST /api/v1/features/usage/sync"
      operationId: synchroniseLesCompteursAvecLaBaseDeDonnesPOSTapiv1featuresusagesync
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/subscription-system/status:
    get:
      summary: "Récupère l'état actuel du système d'abonnement\nGET /api/v1/subscription-system/status"
      operationId: rcupreLtatActuelDuSystmeDabonnementGETapiv1subscriptionSystemstatus
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/subscription-system/is-enabled:
    get:
      summary: "Vérifie si le système d'abonnement est activé\nGET /api/v1/subscription-system/is-enabled"
      operationId: vrifieSiLeSystmeDabonnementEstActivGETapiv1subscriptionSystemisEnabled
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/subscription-system/show-pages:
    get:
      summary: "Vérifie si les pages d'abonnement doivent être affichées\nGET /api/v1/subscription-system/show-pages"
      operationId: vrifieSiLesPagesDabonnementDoiventtreAffichesGETapiv1subscriptionSystemshowPages
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  '/api/v1/subscription-system/check-feature/{feature}':
    get:
      summary: "Vérifie l'accès à une fonctionnalité en tenant compte du toggle\nGET /api/v1/subscription-system/check-feature/{feature}"
      operationId: vrifieLaccsUneFonctionnalitEnTenantCompteDuToggleGETapiv1subscriptionSystemcheckFeaturefeature
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
    parameters:
      -
        in: path
        name: feature
        description: ''
        example: consequatur
        required: true
        schema:
          type: string
  /api/v1/mercure/publish:
    post:
      summary: 'Publier un message de test sur Mercure'
      operationId: publierUnMessageDeTestSurMercure
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/mercure/config:
    get:
      summary: 'Vérifier la configuration Mercure'
      operationId: vrifierLaConfigurationMercure
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
      security: []
  /api/v1/invoices/my:
    get:
      summary: "Récupérer toutes les factures de l'utilisateur connecté"
      operationId: rcuprerToutesLesFacturesDeLutilisateurConnect
      description: "Récupère la liste complète de toutes les factures de l'utilisateur:\n- Factures de réservations (paiements confirmés)\n- Factures d'abonnements (pour les propriétaires)\n- Factures de remboursement\n\nLes factures sont triées par date décroissante (plus récentes en premier).\n\n**Contrôles d'accès:**\n- Clients: Leurs réservations et remboursements\n- Propriétaires: Leurs réservations, abonnements et remboursements\n- Support: Toutes les factures"
      parameters: []
      responses:
        200:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  success: true
                  data:
                    invoices:
                      -
                        type: reservation
                        id: 123
                        reference: BK-ABC123
                        date: '2026-02-03'
                        amount: 750.0
                        currency: EUR
                        status: paid
                        invoice_number: RES-2026-0000000123
                        property_name: 'Villa Océane'
                      -
                        type: subscription
                        id: 78
                        reference: INV-2026-000078
                        date: '2026-02-01'
                        amount: 99.0
                        currency: USD
                        status: paid
                        invoice_number: INV-2026-000078
                        plan_name: Professional
                      -
                        type: refund
                        id: 234
                        reference: pi_1234567890
                        date: '2026-01-28'
                        amount: -500.0
                        currency: EUR
                        status: refunded
                        invoice_number: REF-2026-0000000234
                        property_name: 'Appartement Paris'
                    total: 3
                  message: 'Factures récupérées avec succès'
                properties:
                  success:
                    type: boolean
                    example: true
                  data:
                    type: object
                    properties:
                      invoices:
                        type: array
                        example:
                          -
                            type: reservation
                            id: 123
                            reference: BK-ABC123
                            date: '2026-02-03'
                            amount: 750
                            currency: EUR
                            status: paid
                            invoice_number: RES-2026-0000000123
                            property_name: 'Villa Océane'
                          -
                            type: subscription
                            id: 78
                            reference: INV-2026-000078
                            date: '2026-02-01'
                            amount: 99
                            currency: USD
                            status: paid
                            invoice_number: INV-2026-000078
                            plan_name: Professional
                          -
                            type: refund
                            id: 234
                            reference: pi_1234567890
                            date: '2026-01-28'
                            amount: -500
                            currency: EUR
                            status: refunded
                            invoice_number: REF-2026-0000000234
                            property_name: 'Appartement Paris'
                        items:
                          type: object
                          properties:
                            type:
                              type: string
                              example: reservation
                            id:
                              type: integer
                              example: 123
                            reference:
                              type: string
                              example: BK-ABC123
                            date:
                              type: string
                              example: '2026-02-03'
                            amount:
                              type: number
                              example: 750.0
                            currency:
                              type: string
                              example: EUR
                            status:
                              type: string
                              example: paid
                            invoice_number:
                              type: string
                              example: RES-2026-0000000123
                            property_name:
                              type: string
                              example: 'Villa Océane'
                      total:
                        type: integer
                        example: 3
                  message:
                    type: string
                    example: 'Factures récupérées avec succès'
        500:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  success: false
                  message: 'Erreur lors de la récupération des factures'
                properties:
                  success:
                    type: boolean
                    example: false
                  message:
                    type: string
                    example: 'Erreur lors de la récupération des factures'
      tags:
        - 'Invoices (Factures)'
      security: []
  '/api/v1/invoices/reservation/{reservationId}':
    get:
      summary: "Récupérer la facture d'une réservation"
      operationId: rcuprerLaFactureDuneRservation
      description: "Récupère la facture détaillée d'une réservation spécifique.\nSi la facture n'existe pas, elle est automatiquement régénérée.\n\n**Contrôles d'accès:**\n- Clients: Uniquement leurs propres réservations\n- Propriétaires: Réservations de leurs propriétés\n- Support: Toutes les réservations"
      parameters: []
      responses:
        200:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  success: true
                  data:
                    invoice:
                      company:
                        name: IMOBIZNETS
                        legal_name: 'DIVINE GRACE VACATION HOMES RENTAL L.L.C'
                        address_line1: 'Dmac xl tower 2204, BUSINESS BAY'
                        address_line2: 'Dubai, Dubai 65965'
                        country: 'United Arab Emirates'
                        email: support@divingrace.com
                        tax_reg: '100572506200003'
                      billed_to:
                        name: 'John Doe'
                        email: john@example.com
                        address_line1: '123 Main St'
                        country: France
                      invoice:
                        number: RES-2026-0000000123
                        date: 'Feb 03, 2026'
                        amount: 750.0
                        currency: EUR
                        status: PAID
                      details:
                        type: RESERVATION
                        reservation_ref: BK-ABC123
                        property: 'Villa Océane'
                        checkin_date: 'Feb 15, 2026'
                        checkout_date: 'Feb 20, 2026'
                        nights: 5
                        guests: 4
                      items:
                        -
                          description: 'Villa Océane - 5 night(s) × 2 room(s)'
                          quantity: 10
                          amount: 600.0
                        -
                          description: 'Cleaning Fee'
                          quantity: 1
                          amount: 50.0
                      totals:
                        subtotal: 650.0
                        tax: 100.0
                        discount: 0.0
                        total: 750.0
                    reservation:
                      id: 123
                      booking_ref: BK-ABC123
                      status: confirmed
                  message: 'Facture récupérée avec succès'
                properties:
                  success:
                    type: boolean
                    example: true
                  data:
                    type: object
                    properties:
                      invoice:
                        type: object
                        properties:
                          company:
                            type: object
                            properties:
                              name:
                                type: string
                                example: IMOBIZNETS
                              legal_name:
                                type: string
                                example: 'DIVINE GRACE VACATION HOMES RENTAL L.L.C'
                              address_line1:
                                type: string
                                example: 'Dmac xl tower 2204, BUSINESS BAY'
                              address_line2:
                                type: string
                                example: 'Dubai, Dubai 65965'
                              country:
                                type: string
                                example: 'United Arab Emirates'
                              email:
                                type: string
                                example: support@divingrace.com
                              tax_reg:
                                type: string
                                example: '100572506200003'
                          billed_to:
                            type: object
                            properties:
                              name:
                                type: string
                                example: 'John Doe'
                              email:
                                type: string
                                example: john@example.com
                              address_line1:
                                type: string
                                example: '123 Main St'
                              country:
                                type: string
                                example: France
                          invoice:
                            type: object
                            properties:
                              number:
                                type: string
                                example: RES-2026-0000000123
                              date:
                                type: string
                                example: 'Feb 03, 2026'
                              amount:
                                type: number
                                example: 750.0
                              currency:
                                type: string
                                example: EUR
                              status:
                                type: string
                                example: PAID
                          details:
                            type: object
                            properties:
                              type:
                                type: string
                                example: RESERVATION
                              reservation_ref:
                                type: string
                                example: BK-ABC123
                              property:
                                type: string
                                example: 'Villa Océane'
                              checkin_date:
                                type: string
                                example: 'Feb 15, 2026'
                              checkout_date:
                                type: string
                                example: 'Feb 20, 2026'
                              nights:
                                type: integer
                                example: 5
                              guests:
                                type: integer
                                example: 4
                          items:
                            type: array
                            example:
                              -
                                description: 'Villa Océane - 5 night(s) × 2 room(s)'
                                quantity: 10
                                amount: 600
                              -
                                description: 'Cleaning Fee'
                                quantity: 1
                                amount: 50
                            items:
                              type: object
                              properties:
                                description:
                                  type: string
                                  example: 'Villa Océane - 5 night(s) × 2 room(s)'
                                quantity:
                                  type: integer
                                  example: 10
                                amount:
                                  type: number
                                  example: 600.0
                          totals:
                            type: object
                            properties:
                              subtotal:
                                type: number
                                example: 650.0
                              tax:
                                type: number
                                example: 100.0
                              discount:
                                type: number
                                example: 0.0
                              total:
                                type: number
                                example: 750.0
                      reservation:
                        type: object
                        properties:
                          id:
                            type: integer
                            example: 123
                          booking_ref:
                            type: string
                            example: BK-ABC123
                          status:
                            type: string
                            example: confirmed
                  message:
                    type: string
                    example: 'Facture récupérée avec succès'
        403:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  success: false
                  message: 'Accès non autorisé'
                properties:
                  success:
                    type: boolean
                    example: false
                  message:
                    type: string
                    example: 'Accès non autorisé'
        404:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  success: false
                  message: 'Réservation non trouvée'
                properties:
                  success:
                    type: boolean
                    example: false
                  message:
                    type: string
                    example: 'Réservation non trouvée'
      tags:
        - 'Invoices (Factures)'
      security: []
    parameters:
      -
        in: path
        name: reservationId
        description: "L'ID de la réservation."
        example: 123
        required: true
        schema:
          type: integer
  '/api/v1/invoices/quote/{quoteId}':
    get:
      summary: "Récupérer la facture d'un devis"
      operationId: rcuprerLaFactureDunDevis
      description: "Récupère la facture détaillée d'un devis spécifique.\nSi la facture n'existe pas, elle est automatiquement régénérée.\n\n**Contrôles d'accès:**\n- Clients: Uniquement leurs propres devis\n- Propriétaires: Devis de leurs propriétés\n- Support: Tous les devis"
      parameters: []
      responses:
        200:
          description: ''
          content:
            text/plain:
              schema:
                type: string
                example: "{\n  \"success\": true,\n  \"data\": {\n    \"invoice\": {\n      \"company\": {...},\n      \"billed_to\": {...},\n      \"invoice\": {\n        \"number\": \"QTE-2026-0000000045\",\n        \"date\": \"Feb 03, 2026\",\n        \"amount\": 850.00,\n        \"currency\": \"EUR\",\n        \"status\": \"PENDING\"\n      },\n      \"details\": {\n        \"type\": \"QUOTE\",\n        \"quote_ref\": \"QTE-ABC456\",\n        \"property\": \"Appartement Paris\",\n        \"valid_until\": \"Feb 10, 2026\"\n      },\n      \"items\": [...],\n      \"totals\": {...}\n    },\n    \"quote\": {\n      \"id\": 45,\n      \"quote_ref\": \"QTE-ABC456\",\n      \"status\": \"pending\"\n    }\n  },\n  \"message\": \"Facture récupérée avec succès\"\n}"
        403:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  success: false
                  message: 'Accès non autorisé'
                properties:
                  success:
                    type: boolean
                    example: false
                  message:
                    type: string
                    example: 'Accès non autorisé'
        404:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  success: false
                  message: 'Devis non trouvé'
                properties:
                  success:
                    type: boolean
                    example: false
                  message:
                    type: string
                    example: 'Devis non trouvé'
      tags:
        - 'Invoices (Factures)'
      security: []
    parameters:
      -
        in: path
        name: quoteId
        description: "L'ID du devis."
        example: 45
        required: true
        schema:
          type: integer
  '/api/v1/invoices/subscription/{invoiceId}':
    get:
      summary: "Récupérer une facture d'abonnement"
      operationId: rcuprerUneFactureDabonnement
      description: "Récupère la facture détaillée d'un abonnement spécifique.\nSi la facture n'existe pas, elle est automatiquement régénérée.\n\n**Contrôles d'accès:**\n- Propriétaires: Uniquement leurs propres abonnements\n- Support: Tous les abonnements"
      parameters: []
      responses:
        200:
          description: ''
          content:
            text/plain:
              schema:
                type: string
                example: "{\n  \"success\": true,\n  \"data\": {\n    \"invoice\": {\n      \"company\": {...},\n      \"billed_to\": {...},\n      \"invoice\": {\n        \"number\": \"INV-2026-000078\",\n        \"date\": \"Feb 01, 2026\",\n        \"amount\": 99.00,\n        \"currency\": \"USD\",\n        \"status\": \"PAID\"\n      },\n      \"details\": {\n        \"type\": \"SUBSCRIPTION\",\n        \"subscription_id\": \"sub_1234567890\",\n        \"billing_period\": \"Feb 01, 2026 - Mar 01, 2026\",\n        \"next_payment_date\": \"Mar 01, 2026\",\n        \"plan_name\": \"Professional\",\n        \"plan_interval\": \"monthly\",\n        \"properties_count\": 5\n      },\n      \"items\": [\n        {\n          \"description\": \"Professional Plan - Monthly\",\n          \"quantity\": 1,\n          \"amount\": 99.00\n        }\n      ],\n      \"totals\": {\n        \"subtotal\": 99.00,\n        \"tax\": 0.00,\n        \"discount\": 0.00,\n        \"total\": 99.00\n      }\n    },\n    \"subscription_invoice\": {\n      \"id\": 78,\n      \"invoice_number\": \"INV-2026-000078\",\n      \"status\": \"paid\"\n    }\n  },\n  \"message\": \"Facture récupérée avec succès\"\n}"
        403:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  success: false
                  message: 'Accès non autorisé'
                properties:
                  success:
                    type: boolean
                    example: false
                  message:
                    type: string
                    example: 'Accès non autorisé'
        404:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  success: false
                  message: 'Facture non trouvée'
                properties:
                  success:
                    type: boolean
                    example: false
                  message:
                    type: string
                    example: 'Facture non trouvée'
      tags:
        - 'Invoices (Factures)'
      security: []
    parameters:
      -
        in: path
        name: invoiceId
        description: "L'ID de la facture d'abonnement."
        example: 78
        required: true
        schema:
          type: integer
  '/api/v1/invoices/refund/{paymentId}':
    get:
      summary: 'Récupérer la facture de remboursement'
      operationId: rcuprerLaFactureDeRemboursement
      description: "Récupère la facture de crédit (remboursement) d'un paiement spécifique.\nSi la facture n'existe pas, elle est automatiquement régénérée.\n\n**Note:** Seuls les paiements avec statut REFUNDED ou PARTIALLY_REFUNDED sont acceptés.\n\n**Contrôles d'accès:**\n- Clients: Uniquement leurs propres remboursements\n- Propriétaires: Remboursements de leurs propriétés\n- Support: Tous les remboursements"
      parameters: []
      responses:
        200:
          description: ''
          content:
            text/plain:
              schema:
                type: string
                example: "{\n  \"success\": true,\n  \"data\": {\n    \"invoice\": {\n      \"company\": {...},\n      \"billed_to\": {...},\n      \"invoice\": {\n        \"number\": \"REF-2026-0000000234\",\n        \"date\": \"Feb 03, 2026\",\n        \"amount\": -750.00,\n        \"currency\": \"EUR\",\n        \"status\": \"REFUNDED\"\n      },\n      \"details\": {\n        \"type\": \"REFUND\",\n        \"payment_id\": 234,\n        \"refund_reason\": \"Annulation par le client\",\n        \"refund_date\": \"Feb 03, 2026\",\n        \"original_reservation_ref\": \"BK-ABC123\"\n      },\n      \"items\": [\n        {\n          \"description\": \"Remboursement - Réservation BK-ABC123\",\n          \"quantity\": 1,\n          \"amount\": -750.00\n        }\n      ],\n      \"totals\": {\n        \"subtotal\": -750.00,\n        \"tax\": 0.00,\n        \"discount\": 0.00,\n        \"total\": -750.00\n      }\n    },\n    \"payment\": {\n      \"id\": 234,\n      \"status\": \"refunded\",\n      \"refund_amount\": 750.00\n    }\n  },\n  \"message\": \"Facture de remboursement récupérée avec succès\"\n}"
        400:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  success: false
                  message: "Ce paiement n'est pas un remboursement"
                properties:
                  success:
                    type: boolean
                    example: false
                  message:
                    type: string
                    example: "Ce paiement n'est pas un remboursement"
        403:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  success: false
                  message: 'Accès non autorisé'
                properties:
                  success:
                    type: boolean
                    example: false
                  message:
                    type: string
                    example: 'Accès non autorisé'
        404:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  success: false
                  message: 'Paiement non trouvé'
                properties:
                  success:
                    type: boolean
                    example: false
                  message:
                    type: string
                    example: 'Paiement non trouvé'
      tags:
        - 'Invoices (Factures)'
      security: []
    parameters:
      -
        in: path
        name: paymentId
        description: "L'ID du paiement remboursé."
        example: 234
        required: true
        schema:
          type: integer
  '/api/v1/invoices/reservation/{id}':
    get:
      summary: "Récupérer la facture d'une réservation"
      operationId: rcuprerLaFactureDuneRservation
      description: "Récupère la facture détaillée d'une réservation spécifique.\nSi la facture n'existe pas, elle est automatiquement régénérée.\n\n**Contrôles d'accès:**\n- Clients: Uniquement leurs propres réservations\n- Propriétaires: Réservations de leurs propriétés\n- Support: Toutes les réservations"
      parameters: []
      responses:
        200:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  success: true
                  data:
                    invoice:
                      company:
                        name: IMOBIZNETS
                        legal_name: 'DIVINE GRACE VACATION HOMES RENTAL L.L.C'
                        address_line1: 'Dmac xl tower 2204, BUSINESS BAY'
                        address_line2: 'Dubai, Dubai 65965'
                        country: 'United Arab Emirates'
                        email: support@divingrace.com
                        tax_reg: '100572506200003'
                      billed_to:
                        name: 'John Doe'
                        email: john@example.com
                        address_line1: '123 Main St'
                        country: France
                      invoice:
                        number: RES-2026-0000000123
                        date: 'Feb 03, 2026'
                        amount: 750.0
                        currency: EUR
                        status: PAID
                      details:
                        type: RESERVATION
                        reservation_ref: BK-ABC123
                        property: 'Villa Océane'
                        checkin_date: 'Feb 15, 2026'
                        checkout_date: 'Feb 20, 2026'
                        nights: 5
                        guests: 4
                      items:
                        -
                          description: 'Villa Océane - 5 night(s) × 2 room(s)'
                          quantity: 10
                          amount: 600.0
                        -
                          description: 'Cleaning Fee'
                          quantity: 1
                          amount: 50.0
                      totals:
                        subtotal: 650.0
                        tax: 100.0
                        discount: 0.0
                        total: 750.0
                    reservation:
                      id: 123
                      booking_ref: BK-ABC123
                      status: confirmed
                  message: 'Facture récupérée avec succès'
                properties:
                  success:
                    type: boolean
                    example: true
                  data:
                    type: object
                    properties:
                      invoice:
                        type: object
                        properties:
                          company:
                            type: object
                            properties:
                              name:
                                type: string
                                example: IMOBIZNETS
                              legal_name:
                                type: string
                                example: 'DIVINE GRACE VACATION HOMES RENTAL L.L.C'
                              address_line1:
                                type: string
                                example: 'Dmac xl tower 2204, BUSINESS BAY'
                              address_line2:
                                type: string
                                example: 'Dubai, Dubai 65965'
                              country:
                                type: string
                                example: 'United Arab Emirates'
                              email:
                                type: string
                                example: support@divingrace.com
                              tax_reg:
                                type: string
                                example: '100572506200003'
                          billed_to:
                            type: object
                            properties:
                              name:
                                type: string
                                example: 'John Doe'
                              email:
                                type: string
                                example: john@example.com
                              address_line1:
                                type: string
                                example: '123 Main St'
                              country:
                                type: string
                                example: France
                          invoice:
                            type: object
                            properties:
                              number:
                                type: string
                                example: RES-2026-0000000123
                              date:
                                type: string
                                example: 'Feb 03, 2026'
                              amount:
                                type: number
                                example: 750.0
                              currency:
                                type: string
                                example: EUR
                              status:
                                type: string
                                example: PAID
                          details:
                            type: object
                            properties:
                              type:
                                type: string
                                example: RESERVATION
                              reservation_ref:
                                type: string
                                example: BK-ABC123
                              property:
                                type: string
                                example: 'Villa Océane'
                              checkin_date:
                                type: string
                                example: 'Feb 15, 2026'
                              checkout_date:
                                type: string
                                example: 'Feb 20, 2026'
                              nights:
                                type: integer
                                example: 5
                              guests:
                                type: integer
                                example: 4
                          items:
                            type: array
                            example:
                              -
                                description: 'Villa Océane - 5 night(s) × 2 room(s)'
                                quantity: 10
                                amount: 600
                              -
                                description: 'Cleaning Fee'
                                quantity: 1
                                amount: 50
                            items:
                              type: object
                              properties:
                                description:
                                  type: string
                                  example: 'Villa Océane - 5 night(s) × 2 room(s)'
                                quantity:
                                  type: integer
                                  example: 10
                                amount:
                                  type: number
                                  example: 600.0
                          totals:
                            type: object
                            properties:
                              subtotal:
                                type: number
                                example: 650.0
                              tax:
                                type: number
                                example: 100.0
                              discount:
                                type: number
                                example: 0.0
                              total:
                                type: number
                                example: 750.0
                      reservation:
                        type: object
                        properties:
                          id:
                            type: integer
                            example: 123
                          booking_ref:
                            type: string
                            example: BK-ABC123
                          status:
                            type: string
                            example: confirmed
                  message:
                    type: string
                    example: 'Facture récupérée avec succès'
        403:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  success: false
                  message: 'Accès non autorisé'
                properties:
                  success:
                    type: boolean
                    example: false
                  message:
                    type: string
                    example: 'Accès non autorisé'
        404:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  success: false
                  message: 'Réservation non trouvée'
                properties:
                  success:
                    type: boolean
                    example: false
                  message:
                    type: string
                    example: 'Réservation non trouvée'
      tags:
        - 'Invoices (Factures)'
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the reservation.'
        example: 2
        required: true
        schema:
          type: integer
      -
        in: path
        name: reservationId
        description: "L'ID de la réservation."
        example: 123
        required: true
        schema:
          type: integer
  '/api/v1/invoices/quote/{id}':
    get:
      summary: "Récupérer la facture d'un devis"
      operationId: rcuprerLaFactureDunDevis
      description: "Récupère la facture détaillée d'un devis spécifique.\nSi la facture n'existe pas, elle est automatiquement régénérée.\n\n**Contrôles d'accès:**\n- Clients: Uniquement leurs propres devis\n- Propriétaires: Devis de leurs propriétés\n- Support: Tous les devis"
      parameters: []
      responses:
        200:
          description: ''
          content:
            text/plain:
              schema:
                type: string
                example: "{\n  \"success\": true,\n  \"data\": {\n    \"invoice\": {\n      \"company\": {...},\n      \"billed_to\": {...},\n      \"invoice\": {\n        \"number\": \"QTE-2026-0000000045\",\n        \"date\": \"Feb 03, 2026\",\n        \"amount\": 850.00,\n        \"currency\": \"EUR\",\n        \"status\": \"PENDING\"\n      },\n      \"details\": {\n        \"type\": \"QUOTE\",\n        \"quote_ref\": \"QTE-ABC456\",\n        \"property\": \"Appartement Paris\",\n        \"valid_until\": \"Feb 10, 2026\"\n      },\n      \"items\": [...],\n      \"totals\": {...}\n    },\n    \"quote\": {\n      \"id\": 45,\n      \"quote_ref\": \"QTE-ABC456\",\n      \"status\": \"pending\"\n    }\n  },\n  \"message\": \"Facture récupérée avec succès\"\n}"
        403:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  success: false
                  message: 'Accès non autorisé'
                properties:
                  success:
                    type: boolean
                    example: false
                  message:
                    type: string
                    example: 'Accès non autorisé'
        404:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  success: false
                  message: 'Devis non trouvé'
                properties:
                  success:
                    type: boolean
                    example: false
                  message:
                    type: string
                    example: 'Devis non trouvé'
      tags:
        - 'Invoices (Factures)'
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the quote.'
        example: consequatur
        required: true
        schema:
          type: string
      -
        in: path
        name: quoteId
        description: "L'ID du devis."
        example: 45
        required: true
        schema:
          type: integer
  '/api/v1/invoices/subscription/{id}':
    get:
      summary: "Récupérer une facture d'abonnement"
      operationId: rcuprerUneFactureDabonnement
      description: "Récupère la facture détaillée d'un abonnement spécifique.\nSi la facture n'existe pas, elle est automatiquement régénérée.\n\n**Contrôles d'accès:**\n- Propriétaires: Uniquement leurs propres abonnements\n- Support: Tous les abonnements"
      parameters: []
      responses:
        200:
          description: ''
          content:
            text/plain:
              schema:
                type: string
                example: "{\n  \"success\": true,\n  \"data\": {\n    \"invoice\": {\n      \"company\": {...},\n      \"billed_to\": {...},\n      \"invoice\": {\n        \"number\": \"INV-2026-000078\",\n        \"date\": \"Feb 01, 2026\",\n        \"amount\": 99.00,\n        \"currency\": \"USD\",\n        \"status\": \"PAID\"\n      },\n      \"details\": {\n        \"type\": \"SUBSCRIPTION\",\n        \"subscription_id\": \"sub_1234567890\",\n        \"billing_period\": \"Feb 01, 2026 - Mar 01, 2026\",\n        \"next_payment_date\": \"Mar 01, 2026\",\n        \"plan_name\": \"Professional\",\n        \"plan_interval\": \"monthly\",\n        \"properties_count\": 5\n      },\n      \"items\": [\n        {\n          \"description\": \"Professional Plan - Monthly\",\n          \"quantity\": 1,\n          \"amount\": 99.00\n        }\n      ],\n      \"totals\": {\n        \"subtotal\": 99.00,\n        \"tax\": 0.00,\n        \"discount\": 0.00,\n        \"total\": 99.00\n      }\n    },\n    \"subscription_invoice\": {\n      \"id\": 78,\n      \"invoice_number\": \"INV-2026-000078\",\n      \"status\": \"paid\"\n    }\n  },\n  \"message\": \"Facture récupérée avec succès\"\n}"
        403:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  success: false
                  message: 'Accès non autorisé'
                properties:
                  success:
                    type: boolean
                    example: false
                  message:
                    type: string
                    example: 'Accès non autorisé'
        404:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  success: false
                  message: 'Facture non trouvée'
                properties:
                  success:
                    type: boolean
                    example: false
                  message:
                    type: string
                    example: 'Facture non trouvée'
      tags:
        - 'Invoices (Factures)'
      security: []
    parameters:
      -
        in: path
        name: id
        description: 'The ID of the subscription.'
        example: consequatur
        required: true
        schema:
          type: string
      -
        in: path
        name: invoiceId
        description: "L'ID de la facture d'abonnement."
        example: 78
        required: true
        schema:
          type: integer
  '/api/v1/invoices/refund/{payment_id}':
    get:
      summary: 'Récupérer la facture de remboursement'
      operationId: rcuprerLaFactureDeRemboursement
      description: "Récupère la facture de crédit (remboursement) d'un paiement spécifique.\nSi la facture n'existe pas, elle est automatiquement régénérée.\n\n**Note:** Seuls les paiements avec statut REFUNDED ou PARTIALLY_REFUNDED sont acceptés.\n\n**Contrôles d'accès:**\n- Clients: Uniquement leurs propres remboursements\n- Propriétaires: Remboursements de leurs propriétés\n- Support: Tous les remboursements"
      parameters: []
      responses:
        200:
          description: ''
          content:
            text/plain:
              schema:
                type: string
                example: "{\n  \"success\": true,\n  \"data\": {\n    \"invoice\": {\n      \"company\": {...},\n      \"billed_to\": {...},\n      \"invoice\": {\n        \"number\": \"REF-2026-0000000234\",\n        \"date\": \"Feb 03, 2026\",\n        \"amount\": -750.00,\n        \"currency\": \"EUR\",\n        \"status\": \"REFUNDED\"\n      },\n      \"details\": {\n        \"type\": \"REFUND\",\n        \"payment_id\": 234,\n        \"refund_reason\": \"Annulation par le client\",\n        \"refund_date\": \"Feb 03, 2026\",\n        \"original_reservation_ref\": \"BK-ABC123\"\n      },\n      \"items\": [\n        {\n          \"description\": \"Remboursement - Réservation BK-ABC123\",\n          \"quantity\": 1,\n          \"amount\": -750.00\n        }\n      ],\n      \"totals\": {\n        \"subtotal\": -750.00,\n        \"tax\": 0.00,\n        \"discount\": 0.00,\n        \"total\": -750.00\n      }\n    },\n    \"payment\": {\n      \"id\": 234,\n      \"status\": \"refunded\",\n      \"refund_amount\": 750.00\n    }\n  },\n  \"message\": \"Facture de remboursement récupérée avec succès\"\n}"
        400:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  success: false
                  message: "Ce paiement n'est pas un remboursement"
                properties:
                  success:
                    type: boolean
                    example: false
                  message:
                    type: string
                    example: "Ce paiement n'est pas un remboursement"
        403:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  success: false
                  message: 'Accès non autorisé'
                properties:
                  success:
                    type: boolean
                    example: false
                  message:
                    type: string
                    example: 'Accès non autorisé'
        404:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  success: false
                  message: 'Paiement non trouvé'
                properties:
                  success:
                    type: boolean
                    example: false
                  message:
                    type: string
                    example: 'Paiement non trouvé'
      tags:
        - 'Invoices (Factures)'
      security: []
    parameters:
      -
        in: path
        name: payment_id
        description: 'The ID of the payment.'
        example: consequatur
        required: true
        schema:
          type: string
      -
        in: path
        name: paymentId
        description: "L'ID du paiement remboursé."
        example: 234
        required: true
        schema:
          type: integer
  /api/v1/payments:
    get:
      summary: 'Mini description: Liste paginée des paiements avec filtres (statut, mois, année, propriété) et regroupement par propriété.'
      operationId: miniDescriptionListePagineDesPaiementsAvecFiltresstatutMoisAnnePropritEtRegroupementParProprit
      description: ''
      parameters: []
      responses:
        200:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  success: true
                  data:
                    current_page: 1
                    data:
                      -
                        id: 101
                        status: completed
                        reservation:
                          id: 45
                          property:
                            id: 12
                            public_name: 'Villa Océane'
                    per_page: 20
                    total: 1
                properties:
                  success:
                    type: boolean
                    example: true
                  data:
                    type: object
                    properties:
                      current_page:
                        type: integer
                        example: 1
                      data:
                        type: array
                        example:
                          -
                            id: 101
                            status: completed
                            reservation:
                              id: 45
                              property:
                                id: 12
                                public_name: 'Villa Océane'
                        items:
                          type: object
                          properties:
                            id:
                              type: integer
                              example: 101
                            status:
                              type: string
                              example: completed
                            reservation:
                              type: object
                              properties:
                                id:
                                  type: integer
                                  example: 45
                                property:
                                  type: object
                                  properties:
                                    id:
                                      type: integer
                                      example: 12
                                    public_name:
                                      type: string
                                      example: 'Villa Océane'
                      per_page:
                        type: integer
                        example: 20
                      total:
                        type: integer
                        example: 1
        403:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  success: false
                  message: 'Accès non autorisé.'
                properties:
                  success:
                    type: boolean
                    example: false
                  message:
                    type: string
                    example: 'Accès non autorisé.'
      tags:
        - Paiements
  /api/v1/properties/recommended:
    get:
      summary: 'Mini description: Propriétés recommandées selon le rôle et options de disponibilité.'
      operationId: miniDescriptionPropritsRecommandesSelonLeRleEtOptionsDeDisponibilit
      description: ''
      parameters: []
      responses:
        200:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  message: 'Properties retrieved successfully'
                  data:
                    data:
                      -
                        id: 1
                        public_name: Villa
                        total_comments: 0
                properties:
                  message:
                    type: string
                    example: 'Properties retrieved successfully'
                  data:
                    type: object
                    properties:
                      data:
                        type: array
                        example:
                          -
                            id: 1
                            public_name: Villa
                            total_comments: 0
                        items:
                          type: object
                          properties:
                            id:
                              type: integer
                              example: 1
                            public_name:
                              type: string
                              example: Villa
                            total_comments:
                              type: integer
                              example: 0
        401:
          description: ''
          content:
            text/plain:
              schema:
                type: string
                example: "{\"error\":\"Unauthorized\"}\nRécupère une liste paginée de propriétés recommandées pour l'utilisateur authentifié.\n\n- Si l'utilisateur a le rôle \"admin_proprio\", seules ses propriétés recommandées actives sont retournées.\n- Sinon, toutes les propriétés recommandées actives sont retournées.\n- Les propriétés incluent leurs médias et commodités associés.\n- Pour chaque propriété, la disponibilité (réservée ou non) est calculée selon les dates fournies."
      tags:
        - Propriétés
  /api/v1/properties/synced:
    get:
      summary: "Mini description: Liste paginée des propriétés de l'utilisateur synchronisées avec Channex."
      operationId: miniDescriptionListePagineDesPropritsDeLutilisateurSynchronisesAvecChannex
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Propriétés
  /api/v1/reservations/reservations-by-properties:
    get:
      summary: ''
      operationId: getApiV1ReservationsReservationsByProperties
      description: ''
      parameters: []
      responses:
        200:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  success: true
                  data:
                    current_page: 1
                    data: []
                  message: 'Reservations retrieved successfully'
                properties:
                  success:
                    type: boolean
                    example: true
                  data:
                    type: object
                    properties:
                      current_page:
                        type: integer
                        example: 1
                      data:
                        type: array
                        example: []
                  message:
                    type: string
                    example: 'Reservations retrieved successfully'
        500:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  success: false
                  message: 'Failed to retrieve reservations'
                properties:
                  success:
                    type: boolean
                    example: false
                  message:
                    type: string
                    example: 'Failed to retrieve reservations'
      tags:
        - Réservations
  /api/v1/reservations:
    get:
      summary: ''
      operationId: getApiV1Reservations
      description: ''
      parameters: []
      responses:
        200:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  success: true
                  data:
                    current_page: 1
                    data: []
                  message: 'Reservations retrieved successfully'
                properties:
                  success:
                    type: boolean
                    example: true
                  data:
                    type: object
                    properties:
                      current_page:
                        type: integer
                        example: 1
                      data:
                        type: array
                        example: []
                  message:
                    type: string
                    example: 'Reservations retrieved successfully'
        500:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  success: false
                  message: 'Failed to retrieve reservations'
                properties:
                  success:
                    type: boolean
                    example: false
                  message:
                    type: string
                    example: 'Failed to retrieve reservations'
      tags:
        - Réservations
    post:
      summary: ''
      operationId: postApiV1Reservations
      description: ''
      parameters: []
      responses:
        201:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  success: true
                  data:
                    reservation:
                      id: 1
                    total_price: 750.0
                  message: 'Reservation created successfully'
                properties:
                  success:
                    type: boolean
                    example: true
                  data:
                    type: object
                    properties:
                      reservation:
                        type: object
                        properties:
                          id:
                            type: integer
                            example: 1
                      total_price:
                        type: number
                        example: 750.0
                  message:
                    type: string
                    example: 'Reservation created successfully'
        400:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  success: false
                  message: 'Validation Error'
                  data:
                    property_id:
                      - 'The property id field is required.'
                properties:
                  success:
                    type: boolean
                    example: false
                  message:
                    type: string
                    example: 'Validation Error'
                  data:
                    type: object
                    properties:
                      property_id:
                        type: array
                        example:
                          - 'The property id field is required.'
                        items:
                          type: string
        404:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  success: false
                  message: 'Property not found'
                properties:
                  success:
                    type: boolean
                    example: false
                  message:
                    type: string
                    example: 'Property not found'
        409:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  success: false
                  message: 'La propriété est déjà réservée sur cette période'
                properties:
                  success:
                    type: boolean
                    example: false
                  message:
                    type: string
                    example: 'La propriété est déjà réservée sur cette période'
        500:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  success: false
                  message: 'Failed to create reservation'
                properties:
                  success:
                    type: boolean
                    example: false
                  message:
                    type: string
                    example: 'Failed to create reservation'
      tags:
        - Réservations
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                property_id:
                  type: integer
                  description: 'ID de la propriété. Exemple: 1'
                  example: 17
                checkin_date:
                  type: date
                  description: "Date d'arrivée (YYYY-MM-DD). Exemple: 2024-06-15"
                  example: consequatur
                checkout_date:
                  type: date
                  description: 'Date de départ (YYYY-MM-DD). Exemple: 2024-06-20'
                  example: consequatur
                guests:
                  type: array
                  description: 'Liste des invités. Exemple: [{"first_name":"John","last_name":"Doe","age":30}]'
                  example:
                    - consequatur
                  items:
                    type: string
                status:
                  type: string
                  description: 'Statut initial. Exemple: pending'
                  example: consequatur
                  nullable: true
                rooms:
                  type: array
                  description: 'Validation des chambres si tableau présent.'
                  example: null
                  items:
                    type: object
                    nullable: true
                    properties:
                      room_type_id:
                        type: string
                        description: 'This field is required when <code>rooms</code> is present. The <code>id</code> of an existing record in the channex_room_types table.'
                        example: null
                      rate_plan_id:
                        type: string
                        description: 'The <code>id</code> of an existing record in the channex_rate_plans table.'
                        example: null
                        nullable: true
                      rooms_count:
                        type: integer
                        description: 'Must be at least 1.'
                        example: 45
                        nullable: true
                offer_id:
                  type: integer
                  description: 'Offres, Packages et Services. The <code>id</code> of an existing record in the offers table.'
                  example: 17
                  nullable: true
                package_ids:
                  type: array
                  description: 'The <code>id</code> of an existing record in the packages table.'
                  example:
                    - 17
                  items:
                    type: integer
                service_ids:
                  type: array
                  description: 'The <code>id</code> of an existing record in the services table.'
                  example:
                    - 17
                  items:
                    type: integer
                promo_code:
                  type: string
                  description: 'Code promo. Exemple: SUMMER2024'
                  example: consequatur
              required:
                - property_id
                - checkin_date
                - checkout_date
                - guests
                - status
  '/api/v1/properties/{propertyId}/smart-lock/configure':
    post:
      summary: ''
      operationId: postApiV1PropertiesPropertyIdSmartLockConfigure
      description: ''
      parameters: []
      responses:
        200:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  success: true
                  data:
                    id: 12
                    smart_lock_status: active
                  message: 'Serrure smart lock configurée avec succès'
                properties:
                  success:
                    type: boolean
                    example: true
                  data:
                    type: object
                    properties:
                      id:
                        type: integer
                        example: 12
                      smart_lock_status:
                        type: string
                        example: active
                  message:
                    type: string
                    example: 'Serrure smart lock configurée avec succès'
        403:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  success: false
                  message: "Vous n'êtes pas autorisé à configurer cette propriété"
                properties:
                  success:
                    type: boolean
                    example: false
                  message:
                    type: string
                    example: "Vous n'êtes pas autorisé à configurer cette propriété"
        422:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  success: false
                  message: 'Validation failed'
                properties:
                  success:
                    type: boolean
                    example: false
                  message:
                    type: string
                    example: 'Validation failed'
        500:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  success: false
                  message: 'Erreur lors de la configuration de la serrure'
                properties:
                  success:
                    type: boolean
                    example: false
                  message:
                    type: string
                    example: 'Erreur lors de la configuration de la serrure'
      tags:
        - 'Smart Locks'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                smart_lock_provider_id:
                  type: integer
                  description: 'ID du fournisseur de serrure. Exemple: 1'
                  example: 17
                smart_lock_id:
                  type: integer
                  description: 'ID de la serrure. Exemple: 10'
                  example: 17
                smart_lock_config:
                  type: object
                  description: 'Config additionnelle. Exemple: {"auto_lock": true, "timeout": 30}'
                  example: []
                  properties: {  }
                smart_lock_status:
                  type: string
                  description: 'Statut de la serrure. Exemple: active'
                  example: consequatur
              required:
                - smart_lock_provider_id
                - smart_lock_id
    parameters:
      -
        in: path
        name: propertyId
        description: 'ID de la propriété. Exemple: 12'
        example: 17
        required: true
        schema:
          type: integer
  '/api/v1/properties/{propertyId}/smart-lock/info':
    get:
      summary: ''
      operationId: getApiV1PropertiesPropertyIdSmartLockInfo
      description: ''
      parameters: []
      responses:
        200:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  success: true
                  data:
                    has_smart_lock: true
                    status: active
                  message: 'Informations de la serrure smart lock récupérées'
                properties:
                  success:
                    type: boolean
                    example: true
                  data:
                    type: object
                    properties:
                      has_smart_lock:
                        type: boolean
                        example: true
                      status:
                        type: string
                        example: active
                  message:
                    type: string
                    example: 'Informations de la serrure smart lock récupérées'
        403:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  success: false
                  message: "Vous n'êtes pas autorisé à voir cette propriété"
                properties:
                  success:
                    type: boolean
                    example: false
                  message:
                    type: string
                    example: "Vous n'êtes pas autorisé à voir cette propriété"
        404:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  success: false
                  message: 'Property not found'
                properties:
                  success:
                    type: boolean
                    example: false
                  message:
                    type: string
                    example: 'Property not found'
        500:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  success: false
                  message: 'Erreur lors de la récupération des informations'
                properties:
                  success:
                    type: boolean
                    example: false
                  message:
                    type: string
                    example: 'Erreur lors de la récupération des informations'
      tags:
        - 'Smart Locks'
    parameters:
      -
        in: path
        name: propertyId
        description: 'ID de la propriété. Exemple: 12'
        example: 17
        required: true
        schema:
          type: integer
  '/api/v1/properties/{propertyId}/smart-lock/access-codes':
    get:
      summary: ''
      operationId: getApiV1PropertiesPropertyIdSmartLockAccessCodes
      description: ''
      parameters: []
      responses:
        200:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  success: true
                  data:
                    -
                      code: '123456'
                      valid_from: '2025-08-01T09:00:00Z'
                  message: "Codes d'accès actifs récupérés"
                properties:
                  success:
                    type: boolean
                    example: true
                  data:
                    type: array
                    example:
                      -
                        code: '123456'
                        valid_from: '2025-08-01T09:00:00Z'
                    items:
                      type: object
                      properties:
                        code:
                          type: string
                          example: '123456'
                        valid_from:
                          type: string
                          example: '2025-08-01T09:00:00Z'
                  message:
                    type: string
                    example: "Codes d'accès actifs récupérés"
        403:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  success: false
                  message: 'Accès non autorisé'
                properties:
                  success:
                    type: boolean
                    example: false
                  message:
                    type: string
                    example: 'Accès non autorisé'
        404:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  success: false
                  message: 'Property not found'
                properties:
                  success:
                    type: boolean
                    example: false
                  message:
                    type: string
                    example: 'Property not found'
        500:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  success: false
                  message: "Erreur lors de la récupération des codes d'accès"
                properties:
                  success:
                    type: boolean
                    example: false
                  message:
                    type: string
                    example: "Erreur lors de la récupération des codes d'accès"
      tags:
        - 'Smart Locks'
    parameters:
      -
        in: path
        name: propertyId
        description: 'ID de la propriété. Exemple: 12'
        example: 17
        required: true
        schema:
          type: integer
  '/api/v1/properties/{propertyId}/smart-lock/access-codes/history':
    get:
      summary: ''
      operationId: getApiV1PropertiesPropertyIdSmartLockAccessCodesHistory
      description: ''
      parameters: []
      responses:
        200:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  message: "Historique des codes d'accès récupéré"
                  data: []
                properties:
                  message:
                    type: string
                    example: "Historique des codes d'accès récupéré"
                  data:
                    type: array
                    example: []
        401:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  error: Unauthorized
                properties:
                  error:
                    type: string
                    example: Unauthorized
        403:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  error: 'Accès non autorisé'
                properties:
                  error:
                    type: string
                    example: 'Accès non autorisé'
        404:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  error: 'Property not found'
                properties:
                  error:
                    type: string
                    example: 'Property not found'
        500:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  error: "Erreur lors de la récupération de l'historique"
                properties:
                  error:
                    type: string
                    example: "Erreur lors de la récupération de l'historique"
      tags:
        - 'Smart Locks'
    parameters:
      -
        in: path
        name: propertyId
        description: 'ID de la propriété. Exemple: 12'
        example: 17
        required: true
        schema:
          type: integer
  '/api/v1/tasks/{task}/assign-users':
    post:
      summary: ''
      operationId: postApiV1TasksTaskAssignUsers
      description: ''
      parameters: []
      responses:
        200:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  success: true
                  message: 'Users assigned to task successfully'
                  data:
                    id: 1
                    title: 'Nouvelle tâche'
                    users:
                      -
                        id: 1
                        name: 'Jean Dupont'
                        email: jean@example.com
                      -
                        id: 2
                        name: 'Marie Curie'
                        email: marie@example.com
                properties:
                  success:
                    type: boolean
                    example: true
                  message:
                    type: string
                    example: 'Users assigned to task successfully'
                  data:
                    type: object
                    properties:
                      id:
                        type: integer
                        example: 1
                      title:
                        type: string
                        example: 'Nouvelle tâche'
                      users:
                        type: array
                        example:
                          -
                            id: 1
                            name: 'Jean Dupont'
                            email: jean@example.com
                          -
                            id: 2
                            name: 'Marie Curie'
                            email: marie@example.com
                        items:
                          type: object
                          properties:
                            id:
                              type: integer
                              example: 1
                            name:
                              type: string
                              example: 'Jean Dupont'
                            email:
                              type: string
                              example: jean@example.com
        400:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  success: false
                  message: 'Validation error'
                  data:
                    user_ids:
                      - 'The selected user_ids.1 is invalid.'
                properties:
                  success:
                    type: boolean
                    example: false
                  message:
                    type: string
                    example: 'Validation error'
                  data:
                    type: object
                    properties:
                      user_ids:
                        type: array
                        example:
                          - 'The selected user_ids.1 is invalid.'
                        items:
                          type: string
        404:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  success: false
                  message: 'Task not found'
                properties:
                  success:
                    type: boolean
                    example: false
                  message:
                    type: string
                    example: 'Task not found'
        500:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  success: false
                  message: 'Failed to assign users to task'
                properties:
                  success:
                    type: boolean
                    example: false
                  message:
                    type: string
                    example: 'Failed to assign users to task'
      tags:
        - Tâches
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                user_ids:
                  type: array
                  description: "Liste des IDs d'utilisateurs à assigner. Exemple: [1,2,3]"
                  example:
                    - consequatur
                  items:
                    type: string
              required:
                - user_ids
    parameters:
      -
        in: path
        name: task
        description: 'ID de la tâche. Exemple: 1'
        example: 17
        required: true
        schema:
          type: integer
  /api/v1/user/update:
    post:
      summary: ''
      operationId: postApiV1UserUpdate
      description: ''
      parameters: []
      responses:
        200:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  success: true
                  data:
                    id: 1
                    username: john_doe
                  message: 'User informations updated successfully'
                properties:
                  success:
                    type: boolean
                    example: true
                  data:
                    type: object
                    properties:
                      id:
                        type: integer
                        example: 1
                      username:
                        type: string
                        example: john_doe
                  message:
                    type: string
                    example: 'User informations updated successfully'
        400:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  success: false
                  message: 'Require fields error'
                  data:
                    email:
                      - 'The email has already been taken.'
                properties:
                  success:
                    type: boolean
                    example: false
                  message:
                    type: string
                    example: 'Require fields error'
                  data:
                    type: object
                    properties:
                      email:
                        type: array
                        example:
                          - 'The email has already been taken.'
                        items:
                          type: string
        500:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  success: false
                  message: 'Failed to update user'
                properties:
                  success:
                    type: boolean
                    example: false
                  message:
                    type: string
                    example: 'Failed to update user'
      tags:
        - Utilisateur
      requestBody:
        required: false
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                username:
                  type: string
                  description: "Nom d'utilisateur. Exemple: john_doe"
                  example: consequatur
                first_name:
                  type: string
                  description: 'Prénom. Exemple: John'
                  example: consequatur
                  nullable: true
                last_name:
                  type: string
                  description: 'Nom. Exemple: Doe'
                  example: consequatur
                  nullable: true
                job:
                  type: string
                  description: 'Métier. Exemple: Développeur'
                  example: consequatur
                  nullable: true
                country_id:
                  type: string
                  description: 'The <code>id</code> of an existing record in the countries table.'
                  example: null
                  nullable: true
                location:
                  type: string
                  description: 'Localisation. Exemple: Paris'
                  example: consequatur
                  nullable: true
                phone:
                  type: string
                  description: 'Téléphone. Exemple: +33612345678'
                  example: consequatur
                email:
                  type: string
                  description: 'Email. Exemple: john.doe@example.com'
                  example: qkunze@example.com
                avatar:
                  type: string
                  format: binary
                  description: 'Avatar (jpeg/png/webp <= 5MB)'
                password:
                  type: string
                  description: 'Nouveau mot de passe (min 6) + confirmation.'
                  example: 'O[2UZ5ij-e/dl4m{o,'
                  nullable: true
                password_confirmation:
                  type: string
                  description: 'Confirmation du mot de passe.'
                  example: consequatur
                  nullable: true
  /api/v1/user/delete:
    delete:
      summary: ''
      operationId: deleteApiV1UserDelete
      description: ''
      parameters: []
      responses:
        200:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  success: true
                  data: null
                  message: 'Utilisateur supprimé avec succès'
                properties:
                  success:
                    type: boolean
                    example: true
                  data:
                    type: string
                    example: null
                  message:
                    type: string
                    example: 'Utilisateur supprimé avec succès'
        500:
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  success: false
                  message: 'Erreur lors de la suppression'
                properties:
                  success:
                    type: boolean
                    example: false
                  message:
                    type: string
                    example: 'Erreur lors de la suppression'
      tags:
        - Utilisateur
