FairePlace Types API

Property, room, and equipment types

GitHub OpenAPI

Operations 13

GET /types/places List place types #
POST /types/places Create a new place type #
GET /types/estates List property types #
POST /types/estates Create a new property type #
GET /types/rooms List room types #
POST /types/rooms Create a new room type #
GET /types/equipment List equipment types #
POST /types/equipment Create a new equipment type #
GET /types/inventory List inventory types #
POST /types/inventory Create an inventory type #
GET /types/inventory/{id} Get an inventory type #
PUT /types/inventory/{id} Update an inventory type #
DELETE /types/inventory/{id} Delete an inventory type #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/faireplace-com:faireplace-com-types-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

faireplace-com-types-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: FairePlace Property Management Types API
  description: 'Comprehensive API for managing properties, leases, tenants, and all aspects of real estate management.

    Built with Rust and Actix-web following hexagonal architecture principles.


    ## Authentication

    This API uses API keys for authentication with tenant-based isolation.


    ## Base URL

    - Production: `https://api.faireplace.com/api`'
  version: 1.0.0
  contact:
    name: FairePlace API Support
    email: api-support@faireplace.com
  license:
    name: MIT
    url: https://opensource.org/licenses/MIT
servers:
- url: https://api.faireplace.com/api
  description: Production server
security:
- BearerAuth: []
tags:
- name: Types
  description: Property, room, and equipment types
paths:
  /types/places:
    get:
      operationId: listPlaceTypes
      summary: List place types
      description: 'Retrieves the list of all available place types in the system.

        Place types define the category of a property (e.g., Residential building, Detached house, Commercial premises).'
      tags:
      - Types
      security:
      - BearerAuth: []
      responses:
        '200':
          description: Place types retrieved successfully
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/PlaceType'
              example:
              - id: 550e8400-e29b-41d4-a716-446655440000
                name: Residential building
                created_at: '2024-01-15T10:30:00Z'
                updated_at: '2024-01-15T10:30:00Z'
              - id: 550e8400-e29b-41d4-a716-446655440001
                name: Detached house
                created_at: '2024-01-15T10:30:00Z'
                updated_at: '2024-01-15T10:30:00Z'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalServerError'
    post:
      operationId: createNewPlaceType
      summary: Create a new place type
      description: 'Creates a new place type in the system.

        This operation requires write permissions on properties.'
      tags:
      - Types
      security:
      - BearerAuth: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreatePlaceType'
            example:
              name: Commercial building
      responses:
        '201':
          description: Place type created successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PlaceType'
              example:
                id: 550e8400-e29b-41d4-a716-446655440010
                name: Commercial building
                created_at: '2024-01-15T10:30:00Z'
                updated_at: '2024-01-15T10:30:00Z'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '409':
          $ref: '#/components/responses/Conflict'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /types/estates:
    get:
      operationId: listPropertyTypes
      summary: List property types
      description: 'Retrieves the list of all available property types in the system.

        Property types define the configuration of a dwelling (e.g., Apartment, Studio, 1-bedroom, 2-bedroom, 3-bedroom, etc.).'
      tags:
      - Types
      security:
      - BearerAuth: []
      responses:
        '200':
          description: Property types retrieved successfully
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/EstateType'
              example:
              - id: 550e8400-e29b-41d4-a716-446655440002
                name: 3-bedroom apartment
                created_at: '2024-01-15T10:30:00Z'
                updated_at: '2024-01-15T10:30:00Z'
              - id: 550e8400-e29b-41d4-a716-446655440003
                name: Studio
                created_at: '2024-01-15T10:30:00Z'
                updated_at: '2024-01-15T10:30:00Z'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalServerError'
    post:
      operationId: createNewPropertyType
      summary: Create a new property type
      description: 'Creates a new property type in the system.

        This operation requires write permissions on properties.'
      tags:
      - Types
      security:
      - BearerAuth: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateEstateType'
            example:
              name: Furnished studio
      responses:
        '201':
          description: Property type created successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EstateType'
              example:
                id: 550e8400-e29b-41d4-a716-446655440011
                name: Furnished studio
                created_at: '2024-01-15T10:30:00Z'
                updated_at: '2024-01-15T10:30:00Z'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '409':
          $ref: '#/components/responses/Conflict'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /types/rooms:
    get:
      operationId: listRoomTypes
      summary: List room types
      description: 'Retrieves the list of all available room types in the system.

        Room types define the different rooms of a property (e.g., Living room, Bedroom, Kitchen, Bathroom, etc.).

        The `counts_towards_habitable` field indicates whether the room counts toward the habitable area according to the Carrez Law.'
      tags:
      - Types
      security:
      - BearerAuth: []
      responses:
        '200':
          description: Room types retrieved successfully
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/RoomType'
              example:
              - id: 550e8400-e29b-41d4-a716-446655440004
                name: Living room
                counts_towards_habitable: true
                created_at: '2024-01-15T10:30:00Z'
                updated_at: '2024-01-15T10:30:00Z'
              - id: 550e8400-e29b-41d4-a716-446655440005
                name: Bedroom
                counts_towards_habitable: true
                created_at: '2024-01-15T10:30:00Z'
                updated_at: '2024-01-15T10:30:00Z'
              - id: 550e8400-e29b-41d4-a716-446655440006
                name: Cellar
                counts_towards_habitable: false
                created_at: '2024-01-15T10:30:00Z'
                updated_at: '2024-01-15T10:30:00Z'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalServerError'
    post:
      operationId: createNewRoomType
      summary: Create a new room type
      description: 'Creates a new room type in the system.

        This operation requires write permissions on properties.

        The `counts_towards_habitable` field determines whether the room counts toward the habitable area according to the Carrez Law.'
      tags:
      - Types
      security:
      - BearerAuth: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateRoomType'
            example:
              name: Office
              counts_towards_habitable: true
      responses:
        '201':
          description: Room type created successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RoomType'
              example:
                id: 550e8400-e29b-41d4-a716-446655440011
                name: Office
                counts_towards_habitable: true
                created_at: '2024-01-15T10:30:00Z'
                updated_at: '2024-01-15T10:30:00Z'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '409':
          $ref: '#/components/responses/Conflict'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /types/equipment:
    get:
      operationId: listEquipmentTypes
      summary: List equipment types
      description: 'Retrieves the list of all available equipment types in the system.

        Equipment types define the equipment available in a property (e.g., Heating, Air conditioning, Elevator, etc.).'
      tags:
      - Types
      security:
      - BearerAuth: []
      responses:
        '200':
          description: Equipment types retrieved successfully
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/EquipmentType'
              example:
              - id: 550e8400-e29b-41d4-a716-446655440007
                name: Central heating
                created_at: '2024-01-15T10:30:00Z'
                updated_at: '2024-01-15T10:30:00Z'
              - id: 550e8400-e29b-41d4-a716-446655440008
                name: Air conditioning
                created_at: '2024-01-15T10:30:00Z'
                updated_at: '2024-01-15T10:30:00Z'
              - id: 550e8400-e29b-41d4-a716-446655440009
                name: Elevator
                created_at: '2024-01-15T10:30:00Z'
                updated_at: '2024-01-15T10:30:00Z'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalServerError'
    post:
      operationId: createNewEquipmentType
      summary: Create a new equipment type
      description: 'Creates a new equipment type in the system.

        This operation requires write permissions on properties.'
      tags:
      - Types
      security:
      - BearerAuth: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateEquipmentType'
            example:
              name: Reversible air conditioning
      responses:
        '201':
          description: Equipment type created successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EquipmentType'
              example:
                id: 550e8400-e29b-41d4-a716-446655440010
                name: Reversible air conditioning
                created_at: '2024-01-15T10:30:00Z'
                updated_at: '2024-01-15T10:30:00Z'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '409':
          $ref: '#/components/responses/Conflict'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /types/inventory:
    get:
      operationId: listInventoryTypes
      summary: List inventory types
      description: 'Lists all inventory types for the tenant.


        ```bash

        curl -X GET https://api.faireplace.com/api/types/inventory \

        -H "Authorization: Bearer YOUR_API_KEY"

        ```'
      tags:
      - Types
      security:
      - BearerAuth: []
      responses:
        '200':
          description: List of inventory types.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InventoryTypeList'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalServerError'
    post:
      operationId: createInventoryType
      summary: Create an inventory type
      description: 'Creates a new inventory type. Unknown fields in the body are rejected.


        ```bash

        curl -X POST https://api.faireplace.com/api/types/inventory \

        -H "Authorization: Bearer YOUR_API_KEY" \

        -H "Content-Type: application/json" \

        -d ''{

        "name": "Appliances",

        "description": "Kitchen and home appliances",

        "category_id": "550e8400-e29b-41d4-a716-446655440001",

        "is_active": true

        }''

        ```'
      tags:
      - Types
      security:
      - BearerAuth: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateInventoryType'
            examples:
              create:
                summary: Create an inventory type
                value:
                  name: Appliances
                  description: Kitchen and home appliances
                  category_id: 550e8400-e29b-41d4-a716-446655440001
                  is_active: true
      responses:
        '201':
          description: Inventory type created.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InventoryType'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /types/inventory/{id}:
    get:
      operationId: getInventoryType
      summary: Get an inventory type
      description: 'Retrieves a single inventory type by its identifier.


        ```bash

        curl -X GET https://api.faireplace.com/api/types/inventory/550e8400-e29b-41d4-a716-446655440000 \

        -H "Authorization: Bearer YOUR_API_KEY"

        ```'
      tags:
      - Types
      security:
      - BearerAuth: []
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          format: uuid
      responses:
        '200':
          description: The inventory type.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InventoryType'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
    put:
      operationId: updateInventoryType
      summary: Update an inventory type
      description: 'Updates an inventory type. All fields are optional; only the fields

        provided are updated (partial update).


        ```bash

        curl -X PUT https://api.faireplace.com/api/types/inventory/550e8400-e29b-41d4-a716-446655440000 \

        -H "Authorization: Bearer YOUR_API_KEY" \

        -H "Content-Type: application/json" \

        -d ''{ "name": "Updated Name", "is_active": false }''

        ```'
      tags:
      - Types
      security:
      - BearerAuth: []
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          format: uuid
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateInventoryType'
            examples:
              update:
                summary: Partial update
                value:
                  name: Updated Name
                  is_active: false
      responses:
        '200':
          description: The updated inventory type.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InventoryType'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
        '500':
          $ref: '#/components/responses/InternalServerError'
    delete:
      operationId: deleteInventoryType
      summary: Delete an inventory type
      description: 'Deletes an inventory type by its identifier.


        ```bash

        curl -X DELETE https://api.faireplace.com/api/types/inventory/550e8400-e29b-41d4-a716-446655440000 \

        -H "Authorization: Bearer YOUR_API_KEY"

        ```'
      tags:
      - Types
      security:
      - BearerAuth: []
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          format: uuid
      responses:
        '204':
          description: Inventory type deleted (no content).
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
components:
  responses:
    Forbidden:
      description: Forbidden
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    NotFound:
      description: Not found
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Conflict:
      description: Conflict
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    InternalServerError:
      description: Internal Server Error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    UnprocessableEntity:
      description: Unprocessable Entity
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    BadRequest:
      description: Bad request
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Unauthorized:
      description: Unauthorized
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  schemas:
    CreateEquipmentType:
      type: object
      description: Data for creating a new equipment type
      required:
      - name
      properties:
        name:
          type: string
          description: Name of the equipment type to create
          example: Reversible air conditioning
          maxLength: 255
          minLength: 1
    EstateType:
      type: object
      description: Property type (e.g., Apartment, Studio, 1-bedroom, 2-bedroom, 3-bedroom, etc.)
      properties:
        id:
          type:
          - string
          - 'null'
          format: uuid
          description: Unique identifier of the property type
          example: 550e8400-e29b-41d4-a716-446655440001
        name:
          type:
          - string
          - 'null'
          description: Property type name
          example: 3-bedroom apartment
          maxLength: 255
        created_at:
          type:
          - string
          - 'null'
          format: date-time
          description: Creation date and time
          example: '2024-01-15T10:30:00Z'
        updated_at:
          type:
          - string
          - 'null'
          format: date-time
          description: Last modification date and time
          example: '2024-01-15T10:30:00Z'
      required:
      - id
      - name
      - created_at
      - updated_at
    Error:
      type: object
      description: "The error envelope returned by every authenticated endpoint.\n\nTwo things are worth knowing before you write your error handling:\n\n- **`code` is a symbolic string, not a number.** The numeric HTTP status is\n  in `status`. Branch on `code`: it is stable, and show `message`, which\n  is written for humans and may be reworded without notice.\n- The public guest-signature endpoints use a **different, flatter shape**\n  (`{ \"error_code\": …, \"message\": … }`, no `error` wrapper), because they\n  are consumed by a page that has no session. Their responses document it\n  inline.\n\nThe `X-Request-Id` response header carries the request identifier: quote it\nwhen reporting a problem. It is a header, not a body field.\n"
      required:
      - error
      properties:
        error:
          type: object
          required:
          - code
          - message
          - status
          properties:
            code:
              type: string
              description: Stable symbolic code. Branch on this.
              enum:
              - NOT_FOUND
              - UNAUTHORIZED
              - VALIDATION_ERROR
              - DATABASE_ERROR
              - BUSINESS_ERROR
              - STORAGE_ERROR
              - CONFIG_ERROR
              - FORBIDDEN
              - CONFLICT
              - PARSE_ERROR
              - SERIALIZATION_ERROR
              - AUTHENTICATION_ERROR
              - AUTHORIZATION_ERROR
              - EXTERNAL_SERVICE_ERROR
              - RATE_LIMIT_EXCEEDED
              - PAYMENT_REQUIRED
              - PLAN_LIMIT_REACHED
              - GONE
              - BAD_REQUEST
              - INTERNAL_ERROR
              - INTERNAL_SERVER_ERROR
              example: NOT_FOUND
            message:
              type: string
              description: 'Human-readable explanation, most often in French. Safe to display,

                not safe to parse.

                '
              example: Lease not found
            status:
              type: integer
              description: The HTTP status code, repeated in the body.
              example: 404
            details:
              type: object
              additionalProperties: true
              description: 'Extra machine-readable context. Only present on some errors: on

                `RATE_LIMIT_EXCEEDED` it carries `retry_after_seconds`.

                '
              example:
                retry_after_seconds: 12
    UpdateInventoryType:
      type: object
      description: 'Request to update an inventory type. All fields are optional; only the

        fields provided are updated (partial update).

        '
      properties:
        name:
          type: string
          minLength: 1
          maxLength: 100
          description: New name.
          example: Updated Name
        description:
          type:
          - string
          - 'null'
          maxLength: 500
          description: New description.
          example: Updated description
        category_id:
          type:
          - string
          - 'null'
          format: uuid
          description: New category reference.
          example: 550e8400-e29b-41d4-a716-446655440001
        is_active:
          type: boolean
          description: New active flag.
          example: false
    CreateInventoryType:
      type: object
      description: 'Request to create an inventory type. Unknown fields are rejected

        (`deny_unknown_fields`). Timestamps are server-generated.

        '
      additionalProperties: false
      required:
      - name
      properties:
        name:
          type: string
          minLength: 1
          maxLength: 100
          description: Name of the inventory type.
          example: Appliances
        description:
          type:
          - string
          - 'null'
          maxLength: 500
          description: Optional description.
          example: Kitchen and home appliances
        category_id:
          type:
          - string
          - 'null'
          format: uuid
          description: Optional reference to the inventory category.
          example: 550e8400-e29b-41d4-a716-446655440001
        is_active:
          type: boolean
          description: Whether the type is active. Defaults to `true` when omitted.
          example: true
    CreateEstateType:
      type: object
      description: Data for creating a new property type
      required:
      - name
      properties:
        name:
          type: string
          description: Name of the property type to create
          example: Furnished studio
          maxLength: 255
          minLength: 1
    InventoryTypeList:
      type: array
      description: List of inventory types.
      items:
        $ref: '#/components/schemas/InventoryType'
    CreatePlaceType:
      type: object
      description: Data for creating a new place type
      required:
      - name
      properties:
        name:
          type: string
          description: Name of the place type to create
          example: Commercial building
          maxLength: 255
          minLength: 1
    CreateRoomType:
      type: object
      description: Data for creating a new room type
      required:
      - name
      - counts_towards_habitable
      properties:
        name:
          type: string
          description: Name of the room type to create
          example: Office
          maxLength: 255
          minLength: 1
        counts_towards_habitable:
          type: boolean
          description: Indicates whether this room counts toward the habitable area (Carrez law)
          example: true
          default: true
    EquipmentType:
      type: object
      description: Equipment type available in a property (e.g., Heating, Air conditioning, Elevator, etc.)
      properties:
        id:
          type:
          - string
          - 'null'
          format: uuid
          description: Unique identifier of the equipment type
          example: 550e8400-e29b-41d4-a716-446655440003
        name:
          type:
          - string
          - 'null'
          description: Equipment type name
          example: Central heating
          maxLength: 255
        created_at:
          type:
          - string
          - 'null'
          format: date-time
          description: Creation date and time
          example: '2024-01-15T10:30:00Z'
        updated_at:
          type:
          - string
          - 'null'
          format: date-time
          description: Last modification date and time
          example: '2024-01-15T10:30:00Z'
      required:
      - id
      - name
      - created_at
      - updated_at
    InventoryType:
      type: object
      description: 'An inventory type (a category-of-thing used when describing inventory).


        Field names match the JSON payload exactly (snake_case, no renaming).

        '
      required:
      - id
      - name
      - is_active
      - created_at
      - updated_at
      properties:
        id:
          type: string
          format: uuid
          description: Unique inventory type identifier (server-generated).
          example: 550e8400-e29b-41d4-a716-446655440000
        name:
          type: string
          minLength: 1
          maxLength: 100
          description: Name of the inventory type.
          example: Furniture
        description:
          type:
          - string
          - 'null'
          maxLength: 500
          description: Optional description.
          example: Household furniture items
        category_id:
          type:
          - string
          - 'null'
          format: uuid
          description: Optional reference to the inventory category this type belongs to.
          example: 550e8400-e29b-41d4-a716-446655440001
        is_active:
          type: boolean
          description: Whether the inventory type is active.
          example: true
        created_at:
          type: string
          format: date-time
          description: Creation timestamp (ISO 8601).
          example: '2026-06-20T10:30:00'
        updated_at:
          type: string
          format: date-time
          description: Last update timestamp (ISO 8601).
          example: '2026-06-20T10:30:00'
    PlaceType:
      type: object
      description: Place type (e.g., Apartment building, Detached house, Commercial premises)
      properties:
        id:
          type:
          - string
          - 'null'
          format: uuid
          description: Unique identifier of the place type
          example: 550e8400-e29b-41d4-a716-446655440000
        name:
          type:
          - string
          - 'null'
          description: Place type name
          example: Residential building
          maxLength: 255
        created_at:
          type:
          - string
          - 'null'
          format: date-time
          description: Creation date and time
          example: '2024-01-15T10:30:00Z'
        updated_at:
          type:
          - string
          - 'null'
          format: date-time
          description: Last modification date and time
          example: '2024-01-15T10:30:00Z'
      required:
      - id
      - name
      - created_at
      - updated_at
    RoomType:
      type: object
      description: Room type in a property (e.g., Living room, Bedroom, Kitchen, Bathroom, etc.)
      properties:
        id:
          type:
          - string
          - 'null'
          format: uuid
          description: Unique identifier of the room type
          example: 550e8400-e29b-41d4-a716-446655440002
        name:
          type:
          - string
          - 'null'
          description: Room type name
          example: Living room
          maxLength: 255
        counts_towards_habitable:
          type:
          - boolean
          - 'null'
          description: Indicates whether this room counts toward the habitable area (Carrez law)
          example: true
          default: true
        created_at:
          type:
          - string
          - 'null'
          format: date-time
          description: Creation date and time
          example: '2024-01-15T10:30:00Z'
        updated_at:
          type:
          - string
          - 'null'
          format: date-time
          description: Last modification date and time
          example: '2024-01-15T10:30:00Z'
      required:
      - id
      - name
      - counts_towards_habitable
      - created_at
      - updated_at
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      description: API key with fp_* prefix, passed as Bearer token
    WorkerApiKey:
      type: apiKey
      in: header
      name: X-API-Key
    WorkerBearer:
      type: http
      scheme: bearer
      bearerFormat: Worker