Outils pour utilisateurs

Outils du site


ujusum:3-codage:1-repository:3-spec-open-api

Ceci est une ancienne révision du document !


Table des matières

Phase 3 — Spécification OpenAPI 3.1 Enterprise

Objectif

À ce stade :

Schema Prisma
≈ 110 modèles

Architecture Hexagonale NestJS

DDD

CQRS

RBAC

Multi-Tenant

Enterprise Security

Internationalisation

IA

sont désormais définis.

La prochaine étape consiste à construire la :

Source de vérité contractuelle

du système :

openapi.yaml

qui permettra ensuite de générer automatiquement :

Swagger

DTO NestJS

Validation Zod

SDK TypeScript

Client React Query

Mocks

Tests contractuels

Documentation API

Stratégie

Vu la taille du projet :

100+ modèles

1000+ endpoints

nous allons procéder par domaines.


Découpage OpenAPI

Domaine 1

Core & Security

/auth

/users

/roles

/permissions

/sessions

/mfa

/security

Domaine 2

Owners

/owners

/owner-documents

/owner-bank-accounts

Domaine 3

Properties

/properties

/property-media

/property-features

/property-rates

/property-availability

Domaine 4

Customers

/customers

/customer-documents

/customer-notes

Domaine 5

Reservations

/reservations

/reservation-guests

/reservation-pricing

/reservation-events

Domaine 6

Contracts

/contracts

/contract-templates

/signatures

Domaine 7

Finance

/payments

/refunds

/invoices

/accounting

Domaine 8

CRM

/leads

/opportunities

/pipelines

/tasks

/activities

Domaine 9

Messaging

/notifications

/conversations

/messages

/emails

/sms

Domaine 10

Marketing

/campaigns

/segments

/marketing-events

Domaine 11

Governance

/audit

/workflows

/feature-flags

Domaine 12

OTA

/channels

/distributions

/channel-reservations

/syncs

Domaine 13

Revenue

/pricing-rules

/dynamic-prices

/revenue-forecasts

Domaine 14

Compliance

/consents

/risks

/incidents

/compliance-audits

Domaine 15

Internationalisation

/countries

/currencies

/languages

/translations

Domaine 16

IA

/ai/conversations

/ai/messages

/knowledge

/recommendations

Ordre recommandé

Pour démarrer la génération réelle du backend :

OpenAPI Domain 1

doit être produit en premier.


Phase 3-A

Core Security API

Modules

Auth

Users

Roles

Permissions

Sessions

MFA

Livrable

Premier fichier :

openapi-core-security.yaml

contenant :

  • Security Schemes
  • JWT
  • Refresh Token
  • Users API
  • Roles API
  • Permissions API
  • Pagination
  • Error Model
  • Validation Model

Exemple

Security Scheme

components:

  securitySchemes:

    bearerAuth:

      type: http

      scheme: bearer

      bearerFormat: JWT

Endpoint

GET /users

Réponse

200:

  description: Users list

  content:

    application/json:

      schema:

        $ref: '#/components/schemas/UserListResponse'

Phase 3-A.1 — OpenAPI Core Security

Objectif

Définir le premier contrat API officiel de la plateforme.

Ce document couvre :

Auth

Users

Roles

Permissions

Sessions

Refresh Tokens

MFA

Pagination

Filtering

Sorting

Error Handling

Compatible :

OpenAPI 3.1

NestJS

Swagger

OpenAPI Generator

Zod

React Query

Structure

Fichier

apps/api/openapi/openapi-core-security.yaml

En-tête OpenAPI

openapi: 3.1.0

info:
  title: Rental Platform API
  version: 1.0.0
  description: Enterprise Rental Platform

servers:
  - url: https://api.company.com/v1
    description: Production

  - url: https://staging-api.company.com/v1
    description: Staging

tags:
  - name: Authentication
  - name: Users
  - name: Roles
  - name: Permissions
  - name: Sessions
  - name: MFA

Security

JWT

components:

  securitySchemes:

    bearerAuth:

      type: http

      scheme: bearer

      bearerFormat: JWT

Common Schemas

UUID

Uuid:

  type: string

  format: uuid

Timestamp

Timestamp:

  type: string

  format: date-time

Pagination

PaginationMeta:

  type: object

  properties:

    page:
      type: integer

    pageSize:
      type: integer

    total:
      type: integer

    totalPages:
      type: integer

Error Model

ApiError

ApiError:

  type: object

  required:

    - code
    - message

  properties:

    code:
      type: string

    message:
      type: string

    details:
      type: object

ValidationError

ValidationError:

  allOf:

    - $ref: '#/components/schemas/ApiError'

    - type: object

      properties:

        fields:

          type: array

          items:

            type: object

            properties:

              field:
                type: string

              message:
                type: string

Authentication

RegisterRequest

RegisterRequest:

  type: object

  required:

    - email
    - password
    - firstName
    - lastName

  properties:

    email:
      type: string
      format: email

    password:
      type: string
      minLength: 8

    firstName:
      type: string

    lastName:
      type: string

LoginRequest

LoginRequest:

  type: object

  required:

    - email
    - password

  properties:

    email:
      type: string
      format: email

    password:
      type: string

TokenResponse

TokenResponse:

  type: object

  properties:

    accessToken:
      type: string

    refreshToken:
      type: string

    expiresIn:
      type: integer

    tokenType:
      type: string
      example: Bearer

POST /auth/register

/auth/register:

  post:

    tags:
      - Authentication

    summary: Register user

    requestBody:

      required: true

      content:

        application/json:

          schema:

            $ref: '#/components/schemas/RegisterRequest'

    responses:

      '201':

        description: User created

      '400':

        description: Validation error

POST /auth/login

/auth/login:

  post:

    tags:
      - Authentication

    summary: Login

    requestBody:

      required: true

      content:

        application/json:

          schema:

            $ref: '#/components/schemas/LoginRequest'

    responses:

      '200':

        description: Authentication success

        content:

          application/json:

            schema:

              $ref: '#/components/schemas/TokenResponse'

POST /auth/refresh

/auth/refresh:

  post:

    tags:
      - Authentication

    summary: Refresh token

POST /auth/logout

/auth/logout:

  post:

    security:

      - bearerAuth: []

    tags:

      - Authentication

    summary: Logout

Users

User

User:

  type: object

  properties:

    id:
      $ref: '#/components/schemas/Uuid'

    email:
      type: string

    firstName:
      type: string

    lastName:
      type: string

    active:
      type: boolean

    createdAt:
      $ref: '#/components/schemas/Timestamp'

UserListResponse

UserListResponse:

  type: object

  properties:

    data:

      type: array

      items:

        $ref: '#/components/schemas/User'

    meta:

      $ref: '#/components/schemas/PaginationMeta'

GET /users

/users:

  get:

    security:

      - bearerAuth: []

    tags:

      - Users

    summary: List users

    parameters:

      - name: page
        in: query
        schema:
          type: integer

      - name: pageSize
        in: query
        schema:
          type: integer

      - name: search
        in: query
        schema:
          type: string

      - name: sort
        in: query
        schema:
          type: string

    responses:

      '200':

        description: User list

        content:

          application/json:

            schema:

              $ref: '#/components/schemas/UserListResponse'

GET /users/{id}

/users/{id}:

  get:

    security:

      - bearerAuth: []

    tags:

      - Users

    parameters:

      - name: id
        in: path
        required: true
        schema:
          format: uuid
          type: string

    responses:

      '200':

        description: User

POST /users

/users:

  post:

    security:

      - bearerAuth: []

    tags:

      - Users

    summary: Create user

PATCH /users/{id}

/users/{id}:

  patch:

    security:

      - bearerAuth: []

    tags:

      - Users

DELETE /users/{id}

/users/{id}:

  delete:

    security:

      - bearerAuth: []

    tags:

      - Users

Roles

Role

Role:

  type: object

  properties:

    id:
      type: string

    code:
      type: string

    name:
      type: string

Endpoints

GET    /roles

POST   /roles

GET    /roles/{id}

PATCH  /roles/{id}

DELETE /roles/{id}

Permissions

Permission

Permission:

  type: object

  properties:

    id:
      type: string

    code:
      type: string

    name:
      type: string

Endpoints

GET /permissions

GET /permissions/{id}

User Roles

Endpoints

POST   /users/{id}/roles

DELETE /users/{id}/roles/{roleId}

Sessions

Session

Session:

  type: object

  properties:

    id:
      type: string

    ipAddress:
      type: string

    userAgent:
      type: string

    lastActivityAt:
      type: string
      format: date-time

Endpoints

GET /sessions

DELETE /sessions/{id}

MFA

Enable MFA

POST /mfa/enable

Verify MFA

POST /mfa/verify

Disable MFA

POST /mfa/disable

HTTP Status Codes

200 OK

201 Created

204 No Content

400 Bad Request

401 Unauthorized

403 Forbidden

404 Not Found

409 Conflict

422 Validation Error

429 Too Many Requests

500 Internal Server Error

Headers

Multi Tenant

X-Tenant-Id:
  required: true

Correlation

X-Correlation-Id:
  required: false

Volume API

Phase 3-A.1 fournit :

≈ 25 endpoints

≈ 15 schemas

≈ 6 tags

≈ 3 security flows

Phase 3-A.2 — OpenAPI Owners & Properties

Objectif

Définir le premier domaine métier principal de la plateforme :

Owners

Properties

Property Media

Property Features

Property Availability

Property Rates

Ce domaine couvre :

Sprint 3

Catalogue Immobilier

et constitue le socle métier de :

Réservations

Contrats

Paiements

OTA

Revenue Management

Tags OpenAPI

tags:

  - name: Owners

  - name: OwnerDocuments

  - name: OwnerBankAccounts

  - name: Properties

  - name: PropertyMedia

  - name: PropertyFeatures

  - name: PropertyAvailability

  - name: PropertyRates

Schémas

Owner

Owner:

  type: object

  properties:

    id:
      type: string
      format: uuid

    ownerNumber:
      type: string

    firstName:
      type: string

    lastName:
      type: string

    email:
      type: string
      format: email

    phone:
      type: string

    active:
      type: boolean

    createdAt:
      type: string
      format: date-time

CreateOwnerRequest

CreateOwnerRequest:

  type: object

  required:

    - firstName
 
    - lastName
 
    - email

  properties:

    firstName:
      type: string

    lastName:
      type: string

    email:
      type: string
      format: email

    phone:
      type: string

Endpoints Owners

Collection

GET    /owners

POST   /owners

Ressource

GET    /owners/{id}

PATCH  /owners/{id}

DELETE /owners/{id}

Recherche

GET /owners

?page=1

&pageSize=20

&search=dupont

&active=true

&sort=lastName

Owner Documents

Endpoints

GET    /owners/{id}/documents

POST   /owners/{id}/documents

DELETE /owners/{id}/documents/{documentId}

Upload

multipart/form-data

Types

IDENTITY

TAX

INSURANCE

MANDATE

CONTRACT

Owner Bank Accounts

BankAccount

BankAccount:

  type: object

  properties:

    id:
      type: string

    iban:
      type: string

    bic:
      type: string

    accountHolder:
      type: string

Endpoints

GET    /owners/{id}/bank-accounts

POST   /owners/{id}/bank-accounts

PATCH  /owners/{id}/bank-accounts/{accountId}

DELETE /owners/{id}/bank-accounts/{accountId}

Properties

Property

Property:

  type: object

  properties:

    id:
      type: string
      format: uuid

    code:
      type: string

    title:
      type: string

    slug:
      type: string

    propertyType:
      type: string

    status:
      type: string

    published:
      type: boolean

    maxGuests:
      type: integer

    bedrooms:
      type: integer

    bathrooms:
      type: integer

    surface:
      type: number

    createdAt:
      type: string
      format: date-time

CreatePropertyRequest

CreatePropertyRequest:

  type: object

  required:

    - title
 
    - propertyType

  properties:

    title:
      type: string

    description:
      type: string

    propertyType:
      type: string

    maxGuests:
      type: integer

    bedrooms:
      type: integer

    bathrooms:
      type: integer

Endpoints Properties

Collection

GET    /properties

POST   /properties

Ressource

GET    /properties/{id}

PATCH  /properties/{id}

DELETE /properties/{id}

Publication

POST /properties/{id}/publish

POST /properties/{id}/unpublish

Recherche

GET /properties

?search=villa

?propertyType=HOUSE

?published=true

?ownerId=xxx

?page=1

&pageSize=20

Property Address

Endpoints

GET /properties/{id}/address

PUT /properties/{id}/address

Property Owners

Affectation

GET /properties/{id}/owners

POST /properties/{id}/owners

DELETE /properties/{id}/owners/{ownerId}

Property Media

PropertyMedia

PropertyMedia:

  type: object

  properties:

    id:
      type: string

    fileUrl:
      type: string

    title:
      type: string

    position:
      type: integer

    isCover:
      type: boolean

Endpoints

GET    /properties/{id}/media

POST   /properties/{id}/media

PATCH  /properties/{id}/media/{mediaId}

DELETE /properties/{id}/media/{mediaId}

Upload

multipart/form-data

Property Features

PropertyFeature

PropertyFeature:

  type: object

  properties:

    id:
      type: string

    code:
      type: string

    label:
      type: string

Exemples

POOL

WIFI

AIR_CONDITIONING

PARKING

SEA_VIEW

JACUZZI

Endpoints

GET /property-features

GET /properties/{id}/features

POST /properties/{id}/features

DELETE /properties/{id}/features/{featureId}

Property Availability

Availability

Availability:

  type: object

  properties:

    id:
      type: string

    startDate:
      type: string
      format: date

    endDate:
      type: string
      format: date

    available:
      type: boolean

Endpoints

GET /properties/{id}/availability

POST /properties/{id}/availability

PATCH /availability/{id}

DELETE /availability/{id}

Recherche

GET /properties/{id}/availability

?from=2026-07-01

&to=2026-07-31

Property Rates

PropertyRate

PropertyRate:

  type: object

  properties:

    id:
      type: string

    startDate:
      type: string
      format: date

    endDate:
      type: string
      format: date

    nightlyRate:
      type: number

    minimumStay:
      type: integer

Endpoints

GET /properties/{id}/rates

POST /properties/{id}/rates

PATCH /property-rates/{id}

DELETE /property-rates/{id}

Property Search API

Endpoint public

GET /catalog/properties

Filtres

destination

checkIn

checkOut

guests

priceMin

priceMax

bedrooms

features

Réponse

PropertySearchResponse:

  type: object

  properties:

    data:

      type: array

      items:

        $ref: '#/components/schemas/Property'

    meta:

      $ref: '#/components/schemas/PaginationMeta'

Permissions RBAC

Owners

owners.read

owners.create

owners.update

owners.delete

Properties

properties.read

properties.create

properties.update

properties.publish

properties.delete

Volume API

Cette phase ajoute :

≈ 42 endpoints

≈ 12 schémas OpenAPI

≈ 8 tags Swagger

Cumul OpenAPI

Après Phase 3-A.2 :

≈ 67 endpoints

≈ 30 schémas

≈ 14 tags

Phase 3-A.3 — OpenAPI Customers & Reservations

Objectif

Définir le cœur transactionnel de la plateforme :

Customers

Reservations

Reservation Guests

Reservation Pricing

Reservation Events

Reservation Status History

Cette phase couvre :

Sprint 4

Réservation & Calendrier

et constitue la base de :

Contrats

Paiements

OTA

Revenue Management

CRM

Tags OpenAPI

tags:

  - name: Customers

  - name: CustomerDocuments

  - name: CustomerNotes

  - name: Reservations

  - name: ReservationGuests

  - name: ReservationPricing

  - name: ReservationEvents

  - name: ReservationCalendar

Customers

Customer

Customer:

  type: object

  properties:

    id:
      type: string
      format: uuid

    customerNumber:
      type: string

    firstName:
      type: string

    lastName:
      type: string

    email:
      type: string
      format: email

    phone:
      type: string

    nationality:
      type: string

    active:
      type: boolean

    createdAt:
      type: string
      format: date-time

CreateCustomerRequest

CreateCustomerRequest:

  type: object

  required:

    - firstName
 
    - lastName
 
    - email

  properties:

    firstName:
      type: string

    lastName:
      type: string

    email:
      type: string
      format: email

    phone:
      type: string

    nationality:
      type: string

Endpoints Customers

Collection

GET    /customers

POST   /customers

Ressource

GET    /customers/{id}

PATCH  /customers/{id}

DELETE /customers/{id}

Recherche

GET /customers

?search=smith

?email=test@email.com

?page=1

&pageSize=20

Customer Documents

Endpoints

GET    /customers/{id}/documents

POST   /customers/{id}/documents

DELETE /customers/{id}/documents/{documentId}

Customer Notes

Endpoints

GET    /customers/{id}/notes

POST   /customers/{id}/notes

PATCH  /customer-notes/{id}

DELETE /customer-notes/{id}

Reservations

Reservation

Reservation:

  type: object

  properties:

    id:
      type: string
      format: uuid

    reference:
      type: string

    propertyId:
      type: string
      format: uuid

    customerId:
      type: string
      format: uuid

    status:
      $ref: '#/components/schemas/ReservationStatus'

    checkInDate:
      type: string
      format: date

    checkOutDate:
      type: string
      format: date

    nights:
      type: integer

    adults:
      type: integer

    children:
      type: integer

    totalGuests:
      type: integer

    createdAt:
      type: string
      format: date-time

ReservationStatus

ReservationStatus:

  type: string

  enum:

    - DRAFT
    - PENDING
    - OPTION
    - CONFIRMED
    - CONTRACT_SENT
    - CONTRACT_SIGNED
    - PARTIALLY_PAID
    - PAID
    - CHECKED_IN
    - CHECKED_OUT
    - COMPLETED
    - CANCELLED
    - REFUNDED

CreateReservationRequest

CreateReservationRequest:

  type: object

  required:

    - propertyId
    - checkInDate
    - checkOutDate
    - adults

  properties:

    propertyId:
      type: string
      format: uuid

    customerId:
      type: string
      format: uuid

    checkInDate:
      type: string
      format: date

    checkOutDate:
      type: string
      format: date

    adults:
      type: integer

    children:
      type: integer

    customerNotes:
      type: string

Endpoints Reservations

Collection

GET    /reservations

POST   /reservations

Ressource

GET    /reservations/{id}

PATCH  /reservations/{id}

DELETE /reservations/{id}

Recherche

GET /reservations

?status=CONFIRMED

?propertyId=xxx

?customerId=xxx

?from=2026-07-01

?to=2026-07-31

Réservation Workflow

Confirmation

POST /reservations/{id}/confirm

Annulation

POST /reservations/{id}/cancel

Check-In

POST /reservations/{id}/check-in

Check-Out

POST /reservations/{id}/check-out

Vérification Disponibilité

Endpoint

POST /reservations/check-availability

Request

AvailabilityCheckRequest:

  type: object

  properties:

    propertyId:
      type: string

    checkInDate:
      type: string
      format: date

    checkOutDate:
      type: string
      format: date

Response

AvailabilityCheckResponse:

  type: object

  properties:

    available:
      type: boolean

    conflicts:

      type: array

      items:

        type: string

Reservation Guests

ReservationGuest

ReservationGuest:

  type: object

  properties:

    id:
      type: string

    firstName:
      type: string

    lastName:
      type: string

    nationality:
      type: string

    birthDate:
      type: string
      format: date

    isPrimary:
      type: boolean

Endpoints

GET    /reservations/{id}/guests

POST   /reservations/{id}/guests

PATCH  /reservation-guests/{id}

DELETE /reservation-guests/{id}

Reservation Pricing

ReservationPricing

ReservationPricing:

  type: object

  properties:

    nightlyAmount:
      type: number

    cleaningFee:
      type: number

    touristTax:
      type: number

    extrasAmount:
      type: number

    discountAmount:
      type: number

    totalAmount:
      type: number

    currencyCode:
      type: string

Endpoints

GET /reservations/{id}/pricing

POST /reservations/{id}/pricing/recalculate

Reservation Events

ReservationEvent

ReservationEvent:

  type: object

  properties:

    id:
      type: string

    eventType:
      type: string

    payload:
      type: object

    createdAt:
      type: string
      format: date-time

Endpoints

GET /reservations/{id}/events

Historique des statuts

Endpoint

GET /reservations/{id}/history

Response

ReservationStatusHistory:

  type: object

  properties:

    previousStatus:
      type: string

    newStatus:
      type: string

    changedAt:
      type: string
      format: date-time

    changedBy:
      type: string

Calendrier

Calendrier d'un bien

GET /properties/{id}/calendar

Paramètres

from

to

Réponse

CalendarDay:

  type: object

  properties:

    date:
      type: string

    available:
      type: boolean

    reservationId:
      type: string

Catalogue Public

Recherche

GET /catalog/search

Filtres

destination

checkInDate

checkOutDate

adults

children

priceMin

priceMax

features

Réponse

CatalogSearchResponse:

  type: object

  properties:

    properties:
      type: array

    total:
      type: integer

Permissions RBAC

Customers

customers.read

customers.create

customers.update

customers.delete

Reservations

reservations.read

reservations.create

reservations.update

reservations.cancel

reservations.checkin

reservations.checkout

Volume API

Cette phase ajoute :

≈ 52 endpoints

≈ 18 schémas

≈ 8 tags Swagger

Cumul OpenAPI

Après Phase 3-A.3 :

≈ 120 endpoints

≈ 48 schémas

≈ 22 tags

Phase 3-A.4 — OpenAPI Contracts & Finance

Objectif

Définir le domaine financier et contractuel de la plateforme.

Cette phase couvre :

Sprint 5

Contrats & Signature Électronique

Sprint 6

Paiements & Facturation

Elle permet :

Réservation

↓

Contrat

↓

Signature

↓

Paiement

↓

Facture

↓

Comptabilité

Tags OpenAPI

tags:

  - name: Contracts

  - name: ContractTemplates

  - name: ContractSignatures

  - name: Payments

  - name: Refunds

  - name: Invoices

  - name: Accounting

Contracts

Contract

Contract:

  type: object

  properties:

    id:
      type: string
      format: uuid

    contractNumber:
      type: string

    reservationId:
      type: string
      format: uuid

    status:
      $ref: '#/components/schemas/ContractStatus'

    generatedAt:
      type: string
      format: date-time

    signedAt:
      type: string
      format: date-time

    pdfUrl:
      type: string

ContractStatus

ContractStatus:

  type: string

  enum:

    - DRAFT
    - GENERATED
    - SENT
    - VIEWED
    - SIGNED
    - CANCELLED

Endpoints Contracts

Collection

GET    /contracts

POST   /contracts

Ressource

GET    /contracts/{id}

PATCH  /contracts/{id}

DELETE /contracts/{id}

Réservation

GET /reservations/{id}/contracts

Génération

Générer un contrat

POST /contracts/generate

Request

GenerateContractRequest:

  type: object

  required:

    - reservationId
    - templateId

  properties:

    reservationId:
      type: string

    templateId:
      type: string

Réponse

GenerateContractResponse:

  type: object

  properties:

    contractId:
      type: string

    pdfUrl:
      type: string

PDF

Télécharger

GET /contracts/{id}/pdf

Régénérer

POST /contracts/{id}/regenerate

Contract Templates

ContractTemplate

ContractTemplate:

  type: object

  properties:

    id:
      type: string

    code:
      type: string

    name:
      type: string

    active:
      type: boolean

Endpoints

GET    /contract-templates

POST   /contract-templates

GET    /contract-templates/{id}

PATCH  /contract-templates/{id}

DELETE /contract-templates/{id}

Contract Signatures

Signature

ContractSignature:

  type: object

  properties:

    id:
      type: string

    signerName:
      type: string

    signerEmail:
      type: string

    signedAt:
      type: string
      format: date-time

    status:
      type: string

Envoyer pour signature

POST /contracts/{id}/send-signature

Consulter

GET /contracts/{id}/signatures

Relancer

POST /contracts/{id}/remind-signature

Annuler

POST /contracts/{id}/cancel-signature

Payments

Payment

Payment:

  type: object

  properties:

    id:
      type: string
      format: uuid

    paymentReference:
      type: string

    reservationId:
      type: string

    amount:
      type: number

    currencyCode:
      type: string

    status:
      $ref: '#/components/schemas/PaymentStatus'

    paidAt:
      type: string
      format: date-time

PaymentStatus

PaymentStatus:

  type: string

  enum:

    - PENDING
    - AUTHORIZED
    - PAID
    - FAILED
    - CANCELLED
    - REFUNDED

Endpoints Payments

Collection

GET /payments

POST /payments

Ressource

GET /payments/{id}

PATCH /payments/{id}

Réservation

GET /reservations/{id}/payments

Paiement CB

Créer session

POST /payments/checkout-session

Request

CheckoutSessionRequest:

  type: object

  properties:

    reservationId:
      type: string

    amount:
      type: number

Réponse

CheckoutSessionResponse:

  type: object

  properties:

    sessionId:
      type: string

    checkoutUrl:
      type: string

Webhooks

Stripe

POST /payments/webhooks/stripe

PayPal

POST /payments/webhooks/paypal

Transactions

Historique

GET /payments/{id}/transactions

Refunds

Refund

Refund:

  type: object

  properties:

    id:
      type: string

    amount:
      type: number

    refundedAt:
      type: string
      format: date-time

    reason:
      type: string

Endpoints

GET /refunds

POST /refunds

GET /refunds/{id}

Rembourser

POST /payments/{id}/refund

Invoices

Invoice

Invoice:

  type: object

  properties:

    id:
      type: string

    invoiceNumber:
      type: string

    amountExclTax:
      type: number

    taxAmount:
      type: number

    amountInclTax:
      type: number

    status:
      $ref: '#/components/schemas/InvoiceStatus'

    issueDate:
      type: string
      format: date

InvoiceStatus

InvoiceStatus:

  type: string

  enum:

    - DRAFT
    - ISSUED
    - PAID
    - PARTIALLY_PAID
    - CANCELLED

Endpoints Invoices

Collection

GET    /invoices

POST   /invoices

Ressource

GET    /invoices/{id}

PATCH  /invoices/{id}

Réservation

GET /reservations/{id}/invoices

PDF

GET /invoices/{id}/pdf

Envoi

POST /invoices/{id}/send

Accounting

AccountingEntry

AccountingEntry:

  type: object

  properties:

    id:
      type: string

    entryDate:
      type: string
      format: date

    accountCode:
      type: string

    label:
      type: string

    debit:
      type: number

    credit:
      type: number

Endpoints

GET /accounting/entries

GET /accounting/entries/{id}

Export

GET /accounting/export

Paramètres

from

to

format

Formats

CSV

XLSX

FEC

Workflow Métier

Contrat

Reservation

↓

Generate Contract

↓

Send Signature

↓

Signed

Paiement

Reservation

↓

Checkout Session

↓

Payment

↓

Invoice

Remboursement

Payment

↓

Refund

↓

Accounting Entry

Permissions RBAC

Contrats

contracts.read

contracts.create

contracts.update

contracts.send

contracts.sign

Paiements

payments.read

payments.create

payments.refund

Facturation

invoices.read

invoices.create

invoices.send

Volume API

Cette phase ajoute :

≈ 65 endpoints

≈ 22 schémas

≈ 7 tags Swagger

Cumul OpenAPI

Après Phase 3-A.4 :

≈ 185 endpoints

≈ 70 schémas

≈ 29 tags

Phase 3-A.5 — OpenAPI CRM & Relation Client

Objectif

Mettre en place le CRM intégré de la plateforme.

Cette phase couvre :

Sprint 8

CRM & Relation Client

Le CRM est directement connecté aux :

Customers

Reservations

Contracts

Payments

Marketing

Automation

afin de disposer d'une vision 360° du client.


Tags OpenAPI

tags:

  - name: Leads

  - name: LeadSources

  - name: Pipelines

  - name: PipelineStages

  - name: Opportunities

  - name: Activities

  - name: Tasks

  - name: CustomerNotes

  - name: Tags

  - name: Segments

Leads

Lead

Lead:

  type: object

  properties:

    id:
      type: string
      format: uuid

    leadNumber:
      type: string

    firstName:
      type: string

    lastName:
      type: string

    email:
      type: string

    phone:
      type: string

    source:
      type: string

    score:
      type: integer

    status:
      $ref: '#/components/schemas/LeadStatus'

    assignedUserId:
      type: string

    createdAt:
      type: string
      format: date-time

LeadStatus

LeadStatus:

  type: string

  enum:

    - NEW
 
    - QUALIFIED
 
    - CONTACTED
 
    - PROPOSAL_SENT
 
    - NEGOTIATION
 
    - WON
 
    - LOST

Endpoints

GET    /leads

POST   /leads

GET    /leads/{id}

PATCH  /leads/{id}

DELETE /leads/{id}

Recherche

GET /leads

?status=NEW

?assignedUserId=xxx

?source=WEBSITE

?scoreMin=50

Lead Sources

LeadSource

LeadSource:

  type: object

  properties:

    id:
      type: string

    code:
      type: string

    name:
      type: string

    active:
      type: boolean

Endpoints

GET    /lead-sources

POST   /lead-sources

PATCH  /lead-sources/{id}

DELETE /lead-sources/{id}

Exemples

WEBSITE

GOOGLE

FACEBOOK

INSTAGRAM

BOOKING

AIRBNB

REFERRAL

PHONE

Pipelines

Pipeline

Pipeline:

  type: object

  properties:

    id:
      type: string
      format: uuid

    code:
      type: string

    name:
      type: string

    active:
      type: boolean

    createdAt:
      type: string
      format: date-time

Endpoints

GET    /pipelines

POST   /pipelines

GET    /pipelines/{id}

PATCH  /pipelines/{id}

DELETE /pipelines/{id}

Pipeline Stages

PipelineStage

PipelineStage:

  type: object

  properties:

    id:
      type: string

    pipelineId:
      type: string

    code:
      type: string

    name:
      type: string

    position:
      type: integer

    probability:
      type: integer

Exemples

NEW

QUALIFICATION

CONTACT

VISIT

PROPOSAL

NEGOTIATION

WON

LOST

Endpoints

GET    /pipelines/{id}/stages

POST   /pipelines/{id}/stages

PATCH  /pipeline-stages/{id}

DELETE /pipeline-stages/{id}

Opportunities

Opportunity

Opportunity:

  type: object

  properties:

    id:
      type: string
      format: uuid

    leadId:
      type: string

    pipelineId:
      type: string

    stageId:
      type: string

    title:
      type: string

    estimatedValue:
      type: number

    probability:
      type: integer

    expectedCloseDate:
      type: string
      format: date

    status:
      $ref: '#/components/schemas/OpportunityStatus'

OpportunityStatus

OpportunityStatus:

  type: string

  enum:

    - OPEN
 
    - WON
 
    - LOST
 
    - CANCELLED

Endpoints

GET    /opportunities

POST   /opportunities

GET    /opportunities/{id}

PATCH  /opportunities/{id}

DELETE /opportunities/{id}

Changement d'étape

POST /opportunities/{id}/move

Request

MoveOpportunityRequest:

  type: object

  properties:

    stageId:
      type: string

Activities

Activity

Activity:

  type: object

  properties:

    id:
      type: string

    activityType:
      type: string

    subject:
      type: string

    description:
      type: string

    dueDate:
      type: string
      format: date-time

    completed:
      type: boolean

Activity Types

CALL

EMAIL

VISIT

MEETING

VIDEO_CALL

FOLLOW_UP

Endpoints

GET    /activities

POST   /activities

GET    /activities/{id}

PATCH  /activities/{id}

DELETE /activities/{id}

Affectation

POST /activities/{id}/assign

Tasks

Task

Task:

  type: object

  properties:

    id:
      type: string

    title:
      type: string

    description:
      type: string

    priority:
      $ref: '#/components/schemas/TaskPriority'

    status:
      $ref: '#/components/schemas/TaskStatus'

    dueDate:
      type: string
      format: date-time

    assignedUserId:
      type: string

TaskPriority

TaskPriority:

  type: string

  enum:

    - LOW
 
    - MEDIUM
 
    - HIGH
 
    - URGENT

TaskStatus

TaskStatus:

  type: string

  enum:

    - TODO
 
    - IN_PROGRESS
 
    - DONE
 
    - CANCELLED

Endpoints

GET    /tasks

POST   /tasks

GET    /tasks/{id}

PATCH  /tasks/{id}

DELETE /tasks/{id}

Workflow

Create Task

↓

Assign User

↓

Execute

↓

Done

Customer Notes

CustomerNote

CustomerNote:

  type: object

  properties:

    id:
      type: string

    customerId:
      type: string

    content:
      type: string

    visibility:
      type: string

    createdAt:
      type: string
      format: date-time

Visibility

PRIVATE

TEAM

PUBLIC

Endpoints

GET    /customers/{id}/notes

POST   /customers/{id}/notes

PATCH  /customer-notes/{id}

DELETE /customer-notes/{id}

Tags

Tag

Tag:

  type: object

  properties:

    id:
      type: string

    code:
      type: string

    label:
      type: string

    color:
      type: string

Endpoints

GET    /tags

POST   /tags

PATCH  /tags/{id}

DELETE /tags/{id}

Exemples

VIP

HOT_LEAD

OWNER

RETURNING_CUSTOMER

HIGH_VALUE

Segments

Segment

Segment:

  type: object

  properties:

    id:
      type: string

    code:
      type: string

    name:
      type: string

    rules:
      type: object

    active:
      type: boolean

Endpoints

GET    /segments

POST   /segments

GET    /segments/{id}

PATCH  /segments/{id}

DELETE /segments/{id}

Exemples

CLIENTS_FIDELES

CLIENTS_INACTIFS

PROPRIETAIRES_ACTIFS

PROSPECTS_CHAUDS

ANNIVERSAIRES

CRM Dashboard

KPI

Leads créés

Leads qualifiés

Opportunités ouvertes

CA potentiel

Tâches ouvertes

Activités réalisées

Taux de conversion

Endpoint

GET /crm/dashboard

Conversions

Lead → Customer

POST /leads/{id}/convert

Résultat

Lead

↓

Customer

↓

Opportunity

↓

Reservation

Automatisations

Attribution automatique

POST /leads/{id}/auto-assign

Scoring

POST /leads/{id}/calculate-score

Relances

POST /tasks/{id}/remind

Permissions RBAC

Leads

leads.read

leads.create

leads.update

leads.delete

leads.convert

CRM

crm.read

crm.manage

crm.assign

crm.export

Tasks

tasks.read

tasks.create

tasks.update

tasks.complete

Volume API

Cette phase ajoute :

≈ 72 endpoints

≈ 25 schémas

≈ 10 tags Swagger

Cumul OpenAPI

Après Phase 3-A.5 :

≈ 257 endpoints

≈ 95 schémas

≈ 39 tags

Phase 3-A.6 — OpenAPI Messaging & Notifications

Objectif

Construire le centre de communication unifié de la plateforme.

Cette phase couvre :

Sprint 9

Messagerie & Notifications

Elle permettra :

Messagerie interne

Emails transactionnels

SMS transactionnels

Notifications temps réel

Templates

Campagnes Marketing

Centre de communication

Tags OpenAPI

tags:

  - name: Conversations

  - name: Messages

  - name: Notifications

  - name: Emails

  - name: SMS

  - name: Templates

  - name: Campaigns

Conversations

Conversation

Conversation:

  type: object

  properties:

    id:
      type: string
      format: uuid

    subject:
      type: string

    conversationType:
      $ref: '#/components/schemas/ConversationType'

    status:
      $ref: '#/components/schemas/ConversationStatus'

    createdAt:
      type: string
      format: date-time

ConversationType

ConversationType:

  type: string

  enum:

    - INTERNAL
 
    - CUSTOMER
 
    - OWNER
 
    - RESERVATION
 
    - SUPPORT

ConversationStatus

ConversationStatus:

  type: string

  enum:

    - OPEN
 
    - PENDING
 
    - CLOSED
 
    - ARCHIVED

Endpoints

GET    /conversations

POST   /conversations

GET    /conversations/{id}

PATCH  /conversations/{id}

DELETE /conversations/{id}

Participants

Endpoints

GET    /conversations/{id}/participants

POST   /conversations/{id}/participants

DELETE /conversations/{id}/participants/{userId}

Messages

Message

Message:

  type: object

  properties:

    id:
      type: string

    conversationId:
      type: string

    senderId:
      type: string

    content:
      type: string

    attachments:
      type: array

    createdAt:
      type: string
      format: date-time

Endpoints

GET    /conversations/{id}/messages

POST   /conversations/{id}/messages

GET    /messages/{id}

PATCH  /messages/{id}

DELETE /messages/{id}

Pièces jointes

POST /messages/{id}/attachments

Notifications

Notification

Notification:

  type: object

  properties:

    id:
      type: string

    userId:
      type: string

    type:
      $ref: '#/components/schemas/NotificationType'

    title:
      type: string

    message:
      type: string

    read:
      type: boolean

    createdAt:
      type: string
      format: date-time

NotificationType

NotificationType:

  type: string

  enum:

    - INFO
 
    - SUCCESS
 
    - WARNING
 
    - ERROR
 
    - SYSTEM

Endpoints

GET    /notifications

GET    /notifications/{id}

PATCH  /notifications/{id}/read

PATCH  /notifications/read-all

DELETE /notifications/{id}

Notifications Temps Réel

WebSocket

/ws/notifications

Événements

notification.created

message.received

reservation.created

payment.received

contract.signed

Emails

Email

Email:

  type: object

  properties:

    id:
      type: string

    to:
      type: string

    subject:
      type: string

    status:
      $ref: '#/components/schemas/EmailStatus'

    sentAt:
      type: string
      format: date-time

EmailStatus

EmailStatus:

  type: string

  enum:

    - DRAFT
 
    - QUEUED
 
    - SENT
 
    - DELIVERED
 
    - OPENED
 
    - CLICKED
 
    - BOUNCED
 
    - FAILED

Endpoints

GET /emails

GET /emails/{id}

POST /emails/send

POST /emails/test

Envoi Transactionnel

POST /emails/send

Request

SendEmailRequest:

  type: object

  properties:

    to:
      type: string

    templateCode:
      type: string

    variables:
      type: object

SMS

Sms

Sms:

  type: object

  properties:

    id:
      type: string

    phoneNumber:
      type: string

    message:
      type: string

    status:
      $ref: '#/components/schemas/SmsStatus'

    sentAt:
      type: string
      format: date-time

SmsStatus

SmsStatus:

  type: string

  enum:

    - QUEUED
 
    - SENT
 
    - DELIVERED
 
    - FAILED

Endpoints

GET /sms

GET /sms/{id}

POST /sms/send

POST /sms/test

Templates

Template

Template:

  type: object

  properties:

    id:
      type: string

    code:
      type: string

    name:
      type: string

    channel:
      type: string

    subject:
      type: string

    active:
      type: boolean

Endpoints

GET    /templates

POST   /templates

GET    /templates/{id}

PATCH  /templates/{id}

DELETE /templates/{id}

Types

EMAIL

SMS

PUSH

IN_APP

Exemples

RESERVATION_CONFIRMED

PAYMENT_RECEIVED

CONTRACT_SIGNED

CHECKIN_REMINDER

OWNER_MONTHLY_REPORT

Campaigns

Campaign

Campaign:

  type: object

  properties:

    id:
      type: string

    code:
      type: string

    name:
      type: string

    campaignType:
      type: string

    status:
      type: string

    scheduledAt:
      type: string
      format: date-time

Endpoints

GET    /campaigns

POST   /campaigns

GET    /campaigns/{id}

PATCH  /campaigns/{id}

DELETE /campaigns/{id}

Destinataires

GET  /campaigns/{id}/recipients

POST /campaigns/{id}/recipients

Exécution

POST /campaigns/{id}/schedule

POST /campaigns/{id}/start

POST /campaigns/{id}/pause

POST /campaigns/{id}/cancel

Statistiques Campagnes

Endpoint

GET /campaigns/{id}/statistics

Réponse

CampaignStatistics:

  type: object

  properties:

    recipients:
      type: integer

    sent:
      type: integer

    opened:
      type: integer

    clicked:
      type: integer

    unsubscribed:
      type: integer

Inbox Unifiée

Endpoint

GET /communication/inbox

Agrège

Messages

Emails

SMS

Notifications

Communication Dashboard

KPI

Messages envoyés

Emails délivrés

Taux ouverture

Taux clic

SMS délivrés

Notifications lues

Endpoint

GET /communication/dashboard

Intégrations

Email

SMTP

SendGrid

Mailgun

Amazon SES

SMS

Twilio

OVH SMS

MessageBird

Push

Firebase

OneSignal

Permissions RBAC

Messaging

messages.read

messages.create

messages.delete

Notifications

notifications.read

notifications.manage

Campaigns

campaigns.read

campaigns.create

campaigns.execute

campaigns.delete

Volume API

Cette phase ajoute :

≈ 84 endpoints

≈ 28 schémas

≈ 7 tags Swagger

Cumul OpenAPI

Après Phase 3-A.6 :

≈ 341 endpoints

≈ 123 schémas

≈ 46 tags

Phase 3-A.7 — OpenAPI Marketing, Automatisation & IA

Objectif

Construire la couche d'automatisation intelligente de la plateforme.

Cette phase couvre :

Sprint 13

IA & Automatisation

Elle permet :

Segmentation

Marketing Automation

Scénarios métiers

Déclencheurs

Recommandations IA

Assistant IA

Knowledge Base

Recherche sémantique

Tags OpenAPI

tags:

  - name: MarketingSegments

  - name: MarketingEvents

  - name: AutomationRules

  - name: AutomationScenarios

  - name: AutomationExecutions

  - name: Recommendations

  - name: AI

  - name: KnowledgeBase

Marketing Segments

MarketingSegment

MarketingSegment:

  type: object

  properties:

    id:
      type: string
      format: uuid

    code:
      type: string

    name:
      type: string

    description:
      type: string

    active:
      type: boolean

    rules:
      type: object

Endpoints

GET    /marketing-segments

POST   /marketing-segments

GET    /marketing-segments/{id}

PATCH  /marketing-segments/{id}

DELETE /marketing-segments/{id}

Aperçu

POST /marketing-segments/{id}/preview

Réponse

SegmentPreview:

  type: object

  properties:

    customerCount:
      type: integer

    leadCount:
      type: integer

Marketing Events

MarketingEvent

MarketingEvent:

  type: object

  properties:

    id:
      type: string

    eventType:
      type: string

    customerId:
      type: string

    occurredAt:
      type: string
      format: date-time

    payload:
      type: object

Endpoints

GET /marketing-events

GET /marketing-events/{id}

Filtres

eventType

customerId

from

to

Exemples

EMAIL_OPEN

EMAIL_CLICK

PAGE_VISIT

FORM_SUBMIT

RESERVATION_CREATED

PAYMENT_COMPLETED

Automation Rules

AutomationRule

AutomationRule:

  type: object

  properties:

    id:
      type: string

    code:
      type: string

    name:
      type: string

    triggerEvent:
      type: string

    active:
      type: boolean

Endpoints

GET    /automation-rules

POST   /automation-rules

GET    /automation-rules/{id}

PATCH  /automation-rules/{id}

DELETE /automation-rules/{id}

Activer

POST /automation-rules/{id}/enable

Désactiver

POST /automation-rules/{id}/disable

Automation Scenarios

AutomationScenario

AutomationScenario:

  type: object

  properties:

    id:
      type: string

    code:
      type: string

    name:
      type: string

    triggerType:
      type: string

    active:
      type: boolean

Endpoints

GET    /automation-scenarios

POST   /automation-scenarios

GET    /automation-scenarios/{id}

PATCH  /automation-scenarios/{id}

DELETE /automation-scenarios/{id}

Simuler

POST /automation-scenarios/{id}/simulate

Exécuter

POST /automation-scenarios/{id}/execute

Exemple

ReservationConfirmed

↓

GenerateContract

↓

SendEmail

↓

CreateTask

↓

NotifyOwner

Automation Executions

AutomationExecution

AutomationExecution:

  type: object

  properties:

    id:
      type: string

    status:
      type: string

    entityType:
      type: string

    entityId:
      type: string

    startedAt:
      type: string
      format: date-time

    completedAt:
      type: string
      format: date-time

Endpoints

GET /automation-executions

GET /automation-executions/{id}

Relancer

POST /automation-executions/{id}/retry

Recommendations

Recommendation

Recommendation:

  type: object

  properties:

    id:
      type: string

    recommendationType:
      type: string

    title:
      type: string

    description:
      type: string

    confidenceScore:
      type: number

    accepted:
      type: boolean

Endpoints

GET /recommendations

GET /recommendations/{id}

Accepter

POST /recommendations/{id}/accept

Rejeter

POST /recommendations/{id}/reject

Types

PRICE_OPTIMIZATION

CUSTOMER_RETENTION

LEAD_CONVERSION

REVENUE_FORECAST

PROPERTY_IMPROVEMENT

RISK_ALERT

AI Assistant

Conversation

AiConversation:

  type: object

  properties:

    id:
      type: string

    title:
      type: string

    model:
      type: string

    createdAt:
      type: string
      format: date-time

Endpoints

GET    /ai/conversations

POST   /ai/conversations

GET    /ai/conversations/{id}

DELETE /ai/conversations/{id}

Messages IA

Endpoint

GET  /ai/conversations/{id}/messages

POST /ai/conversations/{id}/messages

Request

AiMessageRequest:

  type: object

  properties:

    content:
      type: string

Response

AiMessageResponse:

  type: object

  properties:

    content:
      type: string

    sources:
      type: array

Cas d'usage

Quels sont les biens
les moins rentables ?

----------------

Quels clients
présentent un risque ?

----------------

Prévois les revenus
des 90 prochains jours

Knowledge Base

KnowledgeDocument

KnowledgeDocument:

  type: object

  properties:

    id:
      type: string

    title:
      type: string

    sourceType:
      type: string

    indexed:
      type: boolean

Endpoints

GET    /knowledge/documents

POST   /knowledge/documents

GET    /knowledge/documents/{id}

DELETE /knowledge/documents/{id}

Upload

POST /knowledge/documents/upload

Indexation

POST /knowledge/documents/{id}/index

Recherche Sémantique

POST /knowledge/search

Request

KnowledgeSearchRequest:

  type: object

  properties:

    query:
      type: string

    limit:
      type: integer

Réponse

KnowledgeSearchResponse:

  type: object

  properties:

    documents:
      type: array

    chunks:
      type: array

Dashboard IA

Endpoint

GET /ai/dashboard

KPI

Conversations

Documents indexés

Automatisations exécutées

Recommandations générées

Taux acceptation

Temps gagné

Événements

Marketing

lead.created

lead.converted

campaign.started

campaign.completed

IA

recommendation.created

assistant.question

assistant.answer

Automation

automation.started

automation.completed

automation.failed

Permissions RBAC

IA

ai.read

ai.chat

ai.manage

Automatisation

automation.read

automation.execute

automation.manage

Knowledge Base

knowledge.read

knowledge.create

knowledge.index

knowledge.delete

Volume API

Cette phase ajoute :

≈ 92 endpoints

≈ 30 schémas

≈ 8 tags Swagger

Cumul OpenAPI

Après Phase 3-A.7 :

≈ 433 endpoints

≈ 153 schémas

≈ 54 tags

Phase 3-A.8 — OpenAPI Governance, Audit & Administration

Objectif

Construire la couche transverse de gouvernance, administration et conformité.

Cette phase couvre :

Sprint 10

Reporting

Sprint 11

Administration

Sprint 19

Gouvernance & Conformité

Elle permet :

Audit complet

Historisation

Feature Flags

Workflows

Administration

Paramétrage plateforme

Conformité

Supervision

Tags OpenAPI

tags:

  - name: AuditLogs

  - name: EntityHistory

  - name: FeatureFlags

  - name: Workflows

  - name: WorkflowInstances

  - name: WorkflowExecutions

  - name: Administration

  - name: SystemSettings

Audit Logs

AuditLog

AuditLog:

  type: object

  properties:

    id:
      type: string
      format: uuid

    entityType:
      type: string

    entityId:
      type: string

    action:
      type: string

    userId:
      type: string

    ipAddress:
      type: string

    correlationId:
      type: string

    createdAt:
      type: string
      format: date-time

Endpoints

GET /audit-logs

GET /audit-logs/{id}

Recherche

GET /audit-logs

?entityType=Reservation

?entityId=xxx

?userId=xxx

?action=UPDATE

?from=2026-01-01

?to=2026-01-31

Export

GET /audit-logs/export

Formats

CSV

XLSX

JSON

Entity History

EntityHistory

EntityHistory:

  type: object

  properties:

    id:
      type: string

    entityType:
      type: string

    entityId:
      type: string

    version:
      type: integer

    snapshot:
      type: object

    createdAt:
      type: string
      format: date-time

Endpoints

GET /entity-history

GET /entity-history/{id}

Historique d'une entité

GET /entity-history/{entityType}/{entityId}

Restauration

POST /entity-history/{id}/restore

Feature Flags

FeatureFlag

FeatureFlag:

  type: object

  properties:

    id:
      type: string

    code:
      type: string

    name:
      type: string

    enabled:
      type: boolean

    configuration:
      type: object

Endpoints

GET    /feature-flags

POST   /feature-flags

GET    /feature-flags/{id}

PATCH  /feature-flags/{id}

DELETE /feature-flags/{id}

Activation

POST /feature-flags/{id}/enable

POST /feature-flags/{id}/disable

Exemples

AI_ASSISTANT

ADVANCED_REPORTING

OTA_V2

REVENUE_MANAGEMENT

OWNER_PORTAL_V2

Workflows

Workflow

Workflow:

  type: object

  properties:

    id:
      type: string

    code:
      type: string

    name:
      type: string

    entityType:
      type: string

    active:
      type: boolean

Endpoints

GET    /workflows

POST   /workflows

GET    /workflows/{id}

PATCH  /workflows/{id}

DELETE /workflows/{id}

Workflow Steps

WorkflowStep

WorkflowStep:

  type: object

  properties:

    id:
      type: string

    workflowId:
      type: string

    code:
      type: string

    name:
      type: string

    position:
      type: integer

    approverRole:
      type: string

Endpoints

GET    /workflows/{id}/steps

POST   /workflows/{id}/steps

PATCH  /workflow-steps/{id}

DELETE /workflow-steps/{id}

Exemple

Reservation Approval

↓

Manager Approval

↓

Contract Generation

↓

Payment Validation

↓

Completed

Workflow Instances

WorkflowInstance

WorkflowInstance:

  type: object

  properties:

    id:
      type: string

    workflowId:
      type: string

    entityType:
      type: string

    entityId:
      type: string

    status:
      type: string

Endpoints

GET /workflow-instances

GET /workflow-instances/{id}

Démarrer

POST /workflow-instances/start

Approuver

POST /workflow-instances/{id}/approve

Rejeter

POST /workflow-instances/{id}/reject

Annuler

POST /workflow-instances/{id}/cancel

Workflow Executions

WorkflowExecution

WorkflowExecution:

  type: object

  properties:

    id:
      type: string

    workflowInstanceId:
      type: string

    workflowStepId:
      type: string

    status:
      type: string

    executedAt:
      type: string
      format: date-time

Endpoints

GET /workflow-executions

GET /workflow-executions/{id}

Administration

Tenant Administration

Endpoints

GET /admin/tenants

POST /admin/tenants

GET /admin/tenants/{id}

PATCH /admin/tenants/{id}

Activation

POST /admin/tenants/{id}/activate

POST /admin/tenants/{id}/suspend

Agences

Endpoints

GET    /admin/agencies

POST   /admin/agencies

GET    /admin/agencies/{id}

PATCH  /admin/agencies/{id}

DELETE /admin/agencies/{id}

Paramètres Système

SystemSetting

SystemSetting:

  type: object

  properties:

    code:
      type: string

    value:
      type: string

    category:
      type: string

Endpoints

GET /system-settings

GET /system-settings/{code}

PUT /system-settings/{code}

Catégories

SECURITY

PAYMENTS

EMAIL

SMS

OTA

BOOKING

INVOICING

Gestion des Jobs

Endpoints

GET /admin/jobs

GET /admin/jobs/{id}

POST /admin/jobs/{id}/retry

POST /admin/jobs/{id}/cancel

Santé de la plateforme

Health Check

GET /admin/health

Réponse

HealthResponse:

  type: object

  properties:

    database:
      type: string

    redis:
      type: string

    storage:
      type: string

    queue:
      type: string

    status:
      type: string

Monitoring

Endpoints

GET /admin/metrics

GET /admin/version

GET /admin/build

Reporting

Dashboard Gouvernance

GET /governance/dashboard

KPI

Audit Logs

Feature Flags

Workflows actifs

Incidents sécurité

Conformité

Risques ouverts

Conformité

Export RGPD

POST /governance/privacy/export

Effacement

POST /governance/privacy/delete

Consentements

GET /governance/consents

Permissions RBAC

Audit

audit.read

audit.export

Administration

admin.read

admin.manage

admin.settings

Workflows

workflow.read

workflow.manage

workflow.execute

Gouvernance

governance.read

governance.manage

Volume API

Cette phase ajoute :

≈ 86 endpoints

≈ 26 schémas

≈ 8 tags Swagger

Cumul OpenAPI

Après Phase 3-A.8 :

≈ 519 endpoints

≈ 179 schémas

≈ 62 tags

Phase 3-A.9 — OpenAPI OTA, Distribution & Channel Manager

Objectif

Construire la couche de distribution multicanal de la plateforme.

Cette phase couvre :

Sprint 12

OTA & Distribution

Sprint 14

API & Partenaires

Sprint 18

Channel Manager Enterprise

Cette couche permet :

Publication OTA

Synchronisation calendriers

Synchronisation tarifs

Synchronisation réservations

Gestion erreurs OTA

Connecteurs partenaires

Tags OpenAPI

tags:

  - name: Channels

  - name: ChannelConnections

  - name: PropertyDistribution

  - name: ChannelReservations

  - name: Synchronization

  - name: SyncErrors

  - name: Partners

Channels

Channel

Channel:

  type: object

  properties:

    id:
      type: string
      format: uuid

    code:
      type: string

    name:
      type: string

    channelType:
      type: string

    active:
      type: boolean

Endpoints

GET /channels

GET /channels/{id}

Canaux supportés

AIRBNB

BOOKING

VRBO

ABRITEL

EXPEDIA

DIRECT

Channel Connections

ChannelConnection

ChannelConnection:

  type: object

  properties:

    id:
      type: string

    channelId:
      type: string

    connectionName:
      type: string

    accountIdentifier:
      type: string

    active:
      type: boolean

    lastSyncAt:
      type: string
      format: date-time

Endpoints

GET    /channel-connections

POST   /channel-connections

GET    /channel-connections/{id}

PATCH  /channel-connections/{id}

DELETE /channel-connections/{id}

Tester la connexion

POST /channel-connections/{id}/test

Activer

POST /channel-connections/{id}/enable

Désactiver

POST /channel-connections/{id}/disable

Property Distribution

PropertyDistribution

PropertyDistribution:

  type: object

  properties:

    id:
      type: string

    propertyId:
      type: string

    channelId:
      type: string

    published:
      type: boolean

    publicationStatus:
      type: string

    externalPropertyId:
      type: string

Endpoints

GET    /property-distributions

POST   /property-distributions

GET    /property-distributions/{id}

PATCH  /property-distributions/{id}

DELETE /property-distributions/{id}

Publication

POST /property-distributions/{id}/publish

POST /property-distributions/{id}/unpublish

Synchronisation

POST /property-distributions/{id}/sync

Publication d'un bien

Endpoint

POST /properties/{id}/publish-to-channel

Request

PublishPropertyRequest:

  type: object

  properties:

    channelConnectionId:
      type: string

Channel Reservations

ChannelReservation

ChannelReservation:

  type: object

  properties:

    id:
      type: string

    reservationId:
      type: string

    externalReservationId:
      type: string

    externalStatus:
      type: string

    importedAt:
      type: string
      format: date-time

Endpoints

GET /channel-reservations

GET /channel-reservations/{id}

Import OTA

POST /channel-reservations/import

Réconciliation

POST /channel-reservations/{id}/reconcile

Synchronization

SyncExecution

SyncExecution:

  type: object

  properties:

    id:
      type: string

    syncType:
      type: string

    status:
      type: string

    startedAt:
      type: string
      format: date-time

    completedAt:
      type: string
      format: date-time

    processedCount:
      type: integer

    successCount:
      type: integer

    errorCount:
      type: integer

Endpoints

GET /synchronizations

GET /synchronizations/{id}

Lancer

POST /synchronizations/start

Synchronisation complète

POST /synchronizations/full

Synchronisation calendrier

POST /synchronizations/calendar

Synchronisation tarifs

POST /synchronizations/rates

Synchronisation réservations

POST /synchronizations/reservations

Types

PROPERTY_EXPORT

AVAILABILITY_EXPORT

RATE_EXPORT

RESERVATION_IMPORT

FULL_SYNC

Sync Errors

SyncError

SyncError:

  type: object

  properties:

    id:
      type: string

    errorCode:
      type: string

    errorMessage:
      type: string

    entityType:
      type: string

    entityId:
      type: string

    occurredAt:
      type: string
      format: date-time

Endpoints

GET /sync-errors

GET /sync-errors/{id}

Relancer

POST /sync-errors/{id}/retry

Ignorer

POST /sync-errors/{id}/ignore

Calendrier OTA

Endpoint

GET /channels/{channelId}/calendar

Paramètres

propertyId

from

to

Tarifs OTA

Endpoint

GET /channels/{channelId}/rates

Mise à jour

POST /channels/{channelId}/rates/push

Dashboard OTA

Endpoint

GET /ota/dashboard

KPI

Biens publiés

OTA connectés

Synchronisations

Erreurs OTA

Réservations importées

Temps moyen synchronisation

Partenaires

Partner

Partner:

  type: object

  properties:

    id:
      type: string

    code:
      type: string

    name:
      type: string

    active:
      type: boolean

Endpoints

GET    /partners

POST   /partners

GET    /partners/{id}

PATCH  /partners/{id}

DELETE /partners/{id}

API Keys

GET    /partners/{id}/api-keys

POST   /partners/{id}/api-keys

DELETE /partners/{id}/api-keys/{keyId}

Webhooks

GET    /partners/{id}/webhooks

POST   /partners/{id}/webhooks

PATCH  /partners/{id}/webhooks/{webhookId}

DELETE /partners/{id}/webhooks/{webhookId}

Marketplace

Endpoint

GET /marketplace/connectors

Connecteurs

Airbnb

Booking

Stripe

Twilio

Mailgun

DocuSign

Zapier

Webhooks OTA

Réservations

POST /webhooks/ota/reservation-created

POST /webhooks/ota/reservation-updated

POST /webhooks/ota/reservation-cancelled

Calendrier

POST /webhooks/ota/calendar-updated

Tarifs

POST /webhooks/ota/rate-updated

Permissions RBAC

OTA

ota.read

ota.manage

ota.sync

ota.publish

Partenaires

partners.read

partners.manage

partners.api

Volume API

Cette phase ajoute :

≈ 76 endpoints

≈ 24 schémas

≈ 7 tags Swagger

Cumul OpenAPI

Après Phase 3-A.9 :

≈ 595 endpoints

≈ 203 schémas

≈ 69 tags

Étape suivante

Phase 3-A.10

OpenAPI Revenue Management & Business Intelligence

Pricing Rules

Dynamic Prices

Revenue Forecasts

Revenue Simulations

Competitor Snapshots

Market Demand

Dashboards

Analytics

Cette phase couvrira :

Sprint 10

Reporting & BI

Sprint 13

Prévisions IA

Sprint 17

Revenue Management

et ajoutera environ :

80 endpoints supplémentaires
ujusum/3-codage/1-repository/3-spec-open-api.1780873018.txt.gz · Dernière modification : 2026/06/08 00:56 de admin

DokuWiki Appliance - Powered by TurnKey Linux