FairePlace Rent Revisions API

Lease rent revision (IRL indexation): simulate, record, list, and apply annual rent revisions on a lease.

GitHub OpenAPI

Operations 5

POST /leases/{lease_id}/rent-revisions/simulate Simulate a rent revision #
GET /leases/{lease_id}/rent-revisions List rent revisions #
POST /leases/{lease_id}/rent-revisions Record a rent revision #
GET /leases/{lease_id}/rent-revisions/{revision_id} Get a rent revision #
PUT /leases/{lease_id}/rent-revisions/{revision_id}/apply Apply a rent revision #

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-rent-revisions-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-rent-revisions-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: FairePlace Property Management Rent Revisions 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: Rent Revisions
  description: 'Lease rent revision (IRL indexation): simulate, record, list, and apply

    annual rent revisions on a lease.'
paths:
  /leases/{lease_id}/rent-revisions/simulate:
    post:
      operationId: simulateRentRevisionLeases
      summary: Simulate a rent revision
      description: 'Simulates an IRL-based rent revision for a lease **without persisting anything**.


        Given a target IRL reference quarter and an effective date, the API computes the new

        rent that would result from indexation, based on the lease''s current rent and its

        baseline IRL value. Use this to preview a revision before recording it.


        ## Usage Example


        ```bash

        curl -X POST https://api.faireplace.com/api/leases/660e8400-e29b-41d4-a716-446655440001/rent-revisions/simulate \

        -H "Authorization: Bearer YOUR_API_KEY" \

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

        -d ''{

        "new_irl_quarter": "T3-2024",

        "effective_date": "2025-07-01"

        }''

        ```


        **Response**:

        ```json

        {

        "previous_rent": 1200.00,

        "new_rent": 1236.00,

        "old_irl_quarter": "T3-2023",

        "old_irl_value": 140.59,

        "new_irl_quarter": "T3-2024",

        "new_irl_value": 144.81,

        "variation_percentage": 3.00,

        "effective_date": "2025-07-01",

        "monthly_increase": 36.00

        }

        ```'
      tags:
      - Rent Revisions
      security:
      - BearerAuth: []
      parameters:
      - name: lease_id
        in: path
        required: true
        description: Lease ID
        schema:
          type: string
          format: uuid
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SimulateRevisionRequest'
            examples:
              simulate:
                summary: Simulate revision with T3-2024 IRL
                value:
                  new_irl_quarter: T3-2024
                  effective_date: '2025-07-01'
      responses:
        '200':
          description: Revision simulated successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RevisionSimulationResponse'
              examples:
                result:
                  summary: Simulation result
                  value:
                    previous_rent: 1200
                    new_rent: 1236
                    old_irl_quarter: T3-2023
                    old_irl_value: 140.59
                    new_irl_quarter: T3-2024
                    new_irl_value: 144.81
                    variation_percentage: 3
                    effective_date: '2025-07-01'
                    monthly_increase: 36
        '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'
  /leases/{lease_id}/rent-revisions:
    get:
      operationId: listRentRevisions
      summary: List rent revisions
      description: 'Retrieves the full history of recorded rent revisions for a lease, ordered chronologically.


        ## Usage Example


        ```bash

        curl -X GET https://api.faireplace.com/api/leases/660e8400-e29b-41d4-a716-446655440001/rent-revisions \

        -H "Authorization: Bearer YOUR_API_KEY"

        ```'
      tags:
      - Rent Revisions
      security:
      - BearerAuth: []
      parameters:
      - name: lease_id
        in: path
        required: true
        description: Lease ID
        schema:
          type: string
          format: uuid
      responses:
        '200':
          description: Revision history retrieved successfully
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/RentRevisionRecord'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
    post:
      operationId: recordRentRevision
      summary: Record a rent revision
      description: 'Records (persists) an IRL-based rent revision for a lease.


        The revision is computed from the provided IRL reference quarter and stored as a

        historical record. Recording does **not** change the active rent: call

        `PUT /leases/{lease_id}/rent-revisions/{revision_id}/apply` to apply it.


        ## Usage Example


        ```bash

        curl -X POST https://api.faireplace.com/api/leases/660e8400-e29b-41d4-a716-446655440001/rent-revisions \

        -H "Authorization: Bearer YOUR_API_KEY" \

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

        -d ''{

        "new_irl_quarter": "T3-2024",

        "effective_date": "2025-07-01"

        }''

        ```'
      tags:
      - Rent Revisions
      security:
      - BearerAuth: []
      parameters:
      - name: lease_id
        in: path
        required: true
        description: Lease ID
        schema:
          type: string
          format: uuid
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RecordRevisionRequest'
            examples:
              record:
                summary: Record revision with T3-2024 IRL
                value:
                  new_irl_quarter: T3-2024
                  effective_date: '2025-07-01'
      responses:
        '201':
          description: Revision recorded successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RentRevisionRecord'
        '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'
  /leases/{lease_id}/rent-revisions/{revision_id}:
    get:
      operationId: getRentRevision
      summary: Get a rent revision
      description: 'Retrieves a single recorded rent revision by its identifier.


        ## Usage Example


        ```bash

        curl -X GET https://api.faireplace.com/api/leases/660e8400-e29b-41d4-a716-446655440001/rent-revisions/550e8400-e29b-41d4-a716-446655440000 \

        -H "Authorization: Bearer YOUR_API_KEY"

        ```'
      tags:
      - Rent Revisions
      security:
      - BearerAuth: []
      parameters:
      - name: lease_id
        in: path
        required: true
        description: Lease ID
        schema:
          type: string
          format: uuid
      - name: revision_id
        in: path
        required: true
        description: Rent revision ID
        schema:
          type: string
          format: uuid
      responses:
        '200':
          description: Revision retrieved successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RentRevisionRecord'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /leases/{lease_id}/rent-revisions/{revision_id}/apply:
    put:
      operationId: applyRentRevision
      summary: Apply a rent revision
      description: 'Applies a previously recorded rent revision to the lease, updating its active rent

        to the revision''s `new_amount`.


        ## Usage Example


        ```bash

        curl -X PUT https://api.faireplace.com/api/leases/660e8400-e29b-41d4-a716-446655440001/rent-revisions/550e8400-e29b-41d4-a716-446655440000/apply \

        -H "Authorization: Bearer YOUR_API_KEY"

        ```


        **Response**:

        ```json

        {

        "message": "Révision appliquée avec succès",

        "revision_id": "550e8400-e29b-41d4-a716-446655440000",

        "lease_id": "660e8400-e29b-41d4-a716-446655440001"

        }

        ```'
      tags:
      - Rent Revisions
      security:
      - BearerAuth: []
      parameters:
      - name: lease_id
        in: path
        required: true
        description: Lease ID
        schema:
          type: string
          format: uuid
      - name: revision_id
        in: path
        required: true
        description: Rent revision ID to apply
        schema:
          type: string
          format: uuid
      responses:
        '200':
          description: Revision applied successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApplyRevisionResponse'
              examples:
                applied:
                  summary: Revision applied
                  value:
                    message: Révision appliquée avec succès
                    revision_id: 550e8400-e29b-41d4-a716-446655440000
                    lease_id: 660e8400-e29b-41d4-a716-446655440001
        '400':
          $ref: '#/components/responses/BadRequest'
        '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'
    UnprocessableEntity:
      description: Unprocessable Entity
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    InternalServerError:
      description: Internal Server Error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    NotFound:
      description: Not found
      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:
    RevisionSimulationResponse:
      type: object
      description: 'Result of a rent revision simulation.


        Amounts are expressed in euros (decimal). The simulation does not modify the lease.

        '
      required:
      - previous_rent
      - new_rent
      - old_irl_quarter
      - old_irl_value
      - new_irl_quarter
      - new_irl_value
      - variation_percentage
      - effective_date
      - monthly_increase
      properties:
        previous_rent:
          type: number
          format: double
          description: Current rent before revision (in euros).
          example: 1200
        new_rent:
          type: number
          format: double
          description: Computed rent after revision (in euros).
          example: 1236
        old_irl_quarter:
          type: string
          description: Baseline IRL reference quarter currently applied to the lease.
          example: T3-2023
        old_irl_value:
          type: number
          format: double
          description: Official IRL value for the baseline quarter.
          example: 140.59
        new_irl_quarter:
          type: string
          description: IRL reference quarter applied in the simulation.
          example: T3-2024
        new_irl_value:
          type: number
          format: double
          description: Official IRL value for the new quarter.
          example: 144.81
        variation_percentage:
          type: number
          format: double
          description: Percentage variation between the old and new rent.
          example: 3
        effective_date:
          type: string
          format: date
          description: Effective date of the simulated revision (ISO 8601).
          example: '2025-07-01'
        monthly_increase:
          type: number
          format: double
          description: Monthly rent increase resulting from the revision (in euros).
          example: 36
    RentRevisionRecord:
      type: object
      description: 'A persisted rent revision record.


        Captures the indexation applied to a lease, including the previous and new rent,

        the IRL index value used, and any applicable increase cap or special period.

        '
      required:
      - id
      - tenant_id
      - lease_id
      - index_value_id
      - revision_date
      - previous_amount
      - new_amount
      - percentage_change
      - capped_increase
      - created_at
      - updated_at
      properties:
        id:
          type: string
          format: uuid
          description: Unique identifier of the revision record.
          example: 550e8400-e29b-41d4-a716-446655440000
        tenant_id:
          type: string
          description: Tenant (organization) identifier owning this revision.
          example: tenant_123
        lease_id:
          type: string
          format: uuid
          description: Lease to which the revision applies.
          example: 660e8400-e29b-41d4-a716-446655440001
        index_value_id:
          type: string
          format: uuid
          description: Identifier of the IRL index value used for the revision.
          example: 770e8400-e29b-41d4-a716-446655440002
        increase_cap_id:
          type:
          - string
          - 'null'
          format: uuid
          description: Identifier of the increase cap applied, if any.
          example: 880e8400-e29b-41d4-a716-446655440003
        special_period_id:
          type:
          - string
          - 'null'
          format: uuid
          description: Identifier of the special (legislative) period applied, if any.
          example: 990e8400-e29b-41d4-a716-446655440004
        revision_date:
          type: string
          format: date
          description: Effective date of the revision (ISO 8601).
          example: '2025-07-01'
        previous_amount:
          type: number
          format: double
          description: Rent amount before the revision (in euros).
          example: 1200
        new_amount:
          type: number
          format: double
          description: Rent amount after the revision (in euros).
          example: 1236
        percentage_change:
          type: number
          format: double
          description: Percentage change between previous and new rent.
          example: 3
        capped_increase:
          type: boolean
          description: Whether the increase was capped by a legislative increase cap.
          example: false
        revision_details:
          type:
          - object
          - 'null'
          additionalProperties: true
          description: Free-form JSON details about the revision computation.
        created_at:
          type: string
          format: date-time
          description: Creation timestamp (ISO 8601).
          example: '2025-06-15T10:30:00Z'
        updated_at:
          type: string
          format: date-time
          description: Last update timestamp (ISO 8601).
          example: '2025-06-15T10:30:00Z'
    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
    ApplyRevisionResponse:
      type: object
      description: 'Confirmation returned after applying a recorded rent revision to the lease.

        '
      required:
      - message
      - revision_id
      - lease_id
      properties:
        message:
          type: string
          description: Human-readable confirmation message.
          example: Révision appliquée avec succès
        revision_id:
          type: string
          format: uuid
          description: Identifier of the revision that was applied.
          example: 550e8400-e29b-41d4-a716-446655440000
        lease_id:
          type: string
          format: uuid
          description: Identifier of the lease whose rent was updated.
          example: 660e8400-e29b-41d4-a716-446655440001
    SimulateRevisionRequest:
      type: object
      description: 'Request to simulate a rent revision (IRL indexation) without persisting anything.


        The simulation computes the new rent that would result from applying the provided

        IRL reference quarter, based on the lease''s current rent and its baseline IRL value.

        '
      required:
      - new_irl_quarter
      - effective_date
      properties:
        new_irl_quarter:
          type: string
          description: 'Target IRL reference quarter to apply, in the format `T{quarter}-{year}`.


            Must not be empty. The matching IRL index value must exist in the rent-indices catalog.

            '
          example: T3-2024
        effective_date:
          type: string
          format: date
          description: 'Effective date of the simulated revision (ISO 8601 `YYYY-MM-DD`).

            '
          example: '2025-07-01'
    RecordRevisionRequest:
      type: object
      description: 'Request to record (persist) a rent revision for a lease.


        The revision is computed from the provided IRL reference quarter and stored as a

        historical record. Use `PUT .../apply` afterwards to apply it to the active rent.

        '
      required:
      - new_irl_quarter
      - effective_date
      properties:
        new_irl_quarter:
          type: string
          description: 'IRL reference quarter to apply, in the format `T{quarter}-{year}`. Must not be empty.

            '
          example: T3-2024
        effective_date:
          type: string
          format: date
          description: Effective date of the revision (ISO 8601 `YYYY-MM-DD`).
          example: '2025-07-01'
  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