FairePlace Amendment Rent Details API
Rent changes carried by an amendment.
Rent changes carried by an amendment.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
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.curl "https://apis.io/api/v1/apis/faireplace-com:faireplace-com-amendment-rent-details-api"
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.
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: 3.2.0
info:
title: FairePlace Property Management Amendment Rent Details 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: Amendment Rent Details
description: Rent changes carried by an amendment.
paths:
/leases/{lease_id}/amendments/{amendment_id}/rent-detail:
post:
operationId: createAmendmentRentDetail
summary: Create rent modification details
description: 'Create the rent detail for a `RENT_MODIFICATION` amendment. Only one rent detail can exist per amendment (1:1 relationship).
**Validation rules:**
- `previous_amount` and `new_amount` must be >= 0
- In **zone tendue**, the new amount is validated against `reference_rent_increased_per_m2 x surface` at activation (Art. 17-2 Loi 89-462 / ALUR)'
tags:
- Amendment Rent Details
security:
- BearerAuth: []
parameters:
- name: lease_id
in: path
required: true
schema:
type: string
format: uuid
- name: amendment_id
in: path
required: true
schema:
type: string
format: uuid
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateAmendmentRentDetailDto'
responses:
'201':
description: Rent detail created
content:
application/json:
schema:
$ref: '#/components/schemas/AmendmentRentDetailResponse'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'409':
description: A rent detail already exists for this amendment
'422':
$ref: '#/components/responses/UnprocessableEntity'
get:
operationId: getAmendmentRentDetail
summary: Get rent modification details
description: Retrieve the rent detail for a specific amendment.
tags:
- Amendment Rent Details
security:
- BearerAuth: []
parameters:
- name: lease_id
in: path
required: true
schema:
type: string
format: uuid
- name: amendment_id
in: path
required: true
schema:
type: string
format: uuid
responses:
'200':
description: Rent detail
content:
application/json:
schema:
$ref: '#/components/schemas/AmendmentRentDetailResponse'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
put:
operationId: updateAmendmentRentDetail
summary: Update rent modification details
description: 'Update the rent detail for an amendment. Since rent detail is a 1:1 relationship, no detail ID is needed: the system identifies the detail by amendment ID.'
tags:
- Amendment Rent Details
security:
- BearerAuth: []
parameters:
- name: lease_id
in: path
required: true
schema:
type: string
format: uuid
- name: amendment_id
in: path
required: true
schema:
type: string
format: uuid
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateAmendmentRentDetailDto'
responses:
'200':
description: Rent detail updated
content:
application/json:
schema:
$ref: '#/components/schemas/AmendmentRentDetailResponse'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
delete:
operationId: deleteAmendmentRentDetail
summary: Delete rent modification details
description: Delete the rent detail for an amendment. Since rent detail is a 1:1 relationship, no detail ID is needed.
tags:
- Amendment Rent Details
security:
- BearerAuth: []
parameters:
- name: lease_id
in: path
required: true
schema:
type: string
format: uuid
- name: amendment_id
in: path
required: true
schema:
type: string
format: uuid
responses:
'204':
description: Rent detail deleted
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
components:
schemas:
AmendmentRentDetailResponse:
type: object
description: Rent modification details for a RENT_MODIFICATION amendment (1:1 relationship)
required:
- id
- amendment_id
- previous_amount
- new_amount
- calculation_method
properties:
id:
type: string
format: uuid
amendment_id:
type: string
format: uuid
previous_amount:
type: number
format: decimal
description: Previous monthly rent amount (EUR)
example: 850
new_amount:
type: number
format: decimal
description: New monthly rent amount (EUR). In zone tendue, must not exceed reference_rent_increased_per_m2 x surface (Art. 17-2 Loi 89-462)
example: 875.5
increase_percentage:
type:
- number
- 'null'
format: decimal
description: Percentage increase
example: 3
index_value_id:
type:
- string
- 'null'
format: uuid
description: Reference to the rent index value used for calculation
increase_cap_id:
type:
- string
- 'null'
format: uuid
description: Reference to the rent increase cap applied
calculation_method:
type: string
description: Method used to calculate the new rent
enum:
- INDEX_BASED
- NEGOTIATED
- LEGAL_INCREASE
- CAPPED
example: INDEX_BASED
calculation_details:
type:
- object
- 'null'
description: JSON details of the calculation methodology
UpdateAmendmentRentDetailDto:
type: object
description: Data for updating rent modification details
properties:
previous_amount:
type:
- number
- 'null'
format: decimal
new_amount:
type:
- number
- 'null'
format: decimal
increase_percentage:
type:
- number
- 'null'
format: decimal
index_value_id:
type:
- string
- 'null'
format: uuid
increase_cap_id:
type:
- string
- 'null'
format: uuid
calculation_method:
type:
- string
- 'null'
enum:
- INDEX_BASED
- NEGOTIATED
- LEGAL_INCREASE
- CAPPED
- null
calculation_details:
type:
- object
- 'null'
CreateAmendmentRentDetailDto:
type: object
description: Data for creating rent modification details
required:
- previous_amount
- new_amount
- calculation_method
properties:
previous_amount:
type: number
format: decimal
description: Previous monthly rent (must be >= 0)
example: 850
new_amount:
type: number
format: decimal
description: New monthly rent (must be >= 0)
example: 875.5
increase_percentage:
type:
- number
- 'null'
format: decimal
index_value_id:
type:
- string
- 'null'
format: uuid
increase_cap_id:
type:
- string
- 'null'
format: uuid
calculation_method:
type: string
enum:
- INDEX_BASED
- NEGOTIATED
- LEGAL_INCREASE
- CAPPED
calculation_details:
type:
- object
- 'null'
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
responses:
UnprocessableEntity:
description: Unprocessable Entity
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'
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