FairePlace Rent Reminders API
Reminders sent to the landlord at the rent due date.
Reminders sent to the landlord at the rent due date.
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-rent-reminders-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 Rent Reminders 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 Reminders
description: Reminders sent to the landlord at the rent due date.
paths:
/leases/{lease_id}/rent-reminders:
post:
operationId: createRentReminder
summary: Create a rent reminder
description: 'Create a rent reminder (relance) for unpaid rent periods.
**French law context (art. 24 loi 89-462):**
Before any legal proceedings, the landlord must demonstrate graduated reminders:
1. `FRIENDLY`: Amiable reminder (email/letter)
2. `FORMAL_NOTICE`: Mise en demeure (LRAR recommended)
3. `PAYMENT_ORDER`: Commandement de payer (via huissier)
The reminder is created with `DRAFT` status. Use `PUT /leases/{lease_id}/notices/{notice_id}/send` to mark it as sent.
**Permissions required:** `leases:write`'
tags:
- Rent Reminders
security:
- BearerAuth: []
parameters:
- name: lease_id
in: path
required: true
schema:
type: string
format: uuid
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- reminder_type
- due_amount
- periods_covered
- delivery_method
properties:
reminder_type:
type: string
enum:
- FRIENDLY
- FORMAL_NOTICE
- PAYMENT_ORDER
due_amount:
type: number
format: decimal
description: Total amount due
example: 1800
periods_covered:
type: array
description: JSON array of covered periods
items:
type: object
properties:
start:
type: string
format: date
end:
type: string
format: date
example:
- start: '2025-01-01'
end: '2025-01-31'
- start: '2025-02-01'
end: '2025-02-28'
delivery_method:
type: string
enum:
- EMAIL
- LETTER
- LRAR
tracking_number:
type:
- string
- 'null'
description: LRAR tracking number
notes:
type:
- string
- 'null'
responses:
'201':
description: Reminder created
content:
application/json:
schema:
$ref: '#/components/schemas/RentReminderResponse'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
get:
operationId: listRentReminders
summary: List rent reminders
description: 'List all rent reminders for a lease, with optional status filter.
**Permissions required:** `leases:read`'
tags:
- Rent Reminders
security:
- BearerAuth: []
parameters:
- name: lease_id
in: path
required: true
schema:
type: string
format: uuid
- name: status
in: query
required: false
schema:
type: string
enum:
- DRAFT
- SENT
- ACKNOWLEDGED
responses:
'200':
description: List of rent reminders
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/RentReminderResponse'
'401':
$ref: '#/components/responses/Unauthorized'
/leases/{lease_id}/rent-reminders/{reminder_id}:
get:
operationId: getRentReminder
summary: Get a rent reminder
description: 'Retrieve a specific rent reminder by ID.
**Permissions required:** `leases:read`'
tags:
- Rent Reminders
security:
- BearerAuth: []
parameters:
- name: lease_id
in: path
required: true
schema:
type: string
format: uuid
- name: reminder_id
in: path
required: true
schema:
type: string
format: uuid
responses:
'200':
description: Reminder details
content:
application/json:
schema:
$ref: '#/components/schemas/RentReminderResponse'
'404':
description: Reminder not found
put:
operationId: updateRentReminder
summary: Update a rent reminder
description: 'Update a rent reminder. **Only draft reminders can be updated.**
**Permissions required:** `leases:write`'
tags:
- Rent Reminders
security:
- BearerAuth: []
parameters:
- name: lease_id
in: path
required: true
schema:
type: string
format: uuid
- name: reminder_id
in: path
required: true
schema:
type: string
format: uuid
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
reminder_type:
type: string
enum:
- FRIENDLY
- FORMAL_NOTICE
- PAYMENT_ORDER
due_amount:
type: number
format: decimal
periods_covered:
type: array
items:
type: object
delivery_method:
type: string
enum:
- EMAIL
- LETTER
- LRAR
tracking_number:
type: string
notes:
type: string
responses:
'200':
description: Reminder updated
content:
application/json:
schema:
$ref: '#/components/schemas/RentReminderResponse'
'400':
description: Cannot update non-draft reminder
'404':
description: Reminder not found
delete:
operationId: deleteRentReminder
summary: Delete a rent reminder
description: 'Delete a rent reminder. **Only draft reminders can be deleted.**
**Permissions required:** `leases:delete`'
tags:
- Rent Reminders
security:
- BearerAuth: []
parameters:
- name: lease_id
in: path
required: true
schema:
type: string
format: uuid
- name: reminder_id
in: path
required: true
schema:
type: string
format: uuid
responses:
'204':
description: Reminder deleted
'400':
description: Cannot delete non-draft reminder
'404':
description: Reminder not found
/leases/{lease_id}/rent-reminders/{reminder_id}/generate-pdf:
post:
operationId: generateReminderLetterPDF
summary: Generate reminder letter PDF
description: 'Generate a formal letter PDF for the reminder using Typst templates.
The generated document URL is stored on the reminder.
**Permissions required:** `leases:write`'
tags:
- Rent Reminders
security:
- BearerAuth: []
parameters:
- name: lease_id
in: path
required: true
schema:
type: string
format: uuid
- name: reminder_id
in: path
required: true
schema:
type: string
format: uuid
responses:
'200':
description: PDF generation result
content:
application/json:
schema:
type: object
properties:
id:
type: string
format: uuid
status:
type: string
message:
type: string
'404':
description: Reminder not found
/leases/{lease_id}/rent-reminders/{reminder_id}/send:
put:
operationId: markReminderAsSent
summary: Mark reminder as sent
description: 'Mark a reminder as sent. Sets status to `SENT` and records the current date as `sent_date`.
**Permissions required:** `leases:write`'
tags:
- Rent Reminders
security:
- BearerAuth: []
parameters:
- name: lease_id
in: path
required: true
schema:
type: string
format: uuid
- name: reminder_id
in: path
required: true
schema:
type: string
format: uuid
responses:
'200':
description: Reminder marked as sent
content:
application/json:
schema:
$ref: '#/components/schemas/RentReminderResponse'
'400':
description: Reminder already sent
'404':
description: Reminder not found
components:
responses:
Forbidden:
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
Unauthorized:
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
schemas:
RentReminderResponse:
type: object
properties:
id:
type: string
format: uuid
lease_id:
type: string
format: uuid
reminder_type:
type: string
enum:
- FRIENDLY
- FORMAL_NOTICE
- PAYMENT_ORDER
sent_date:
type:
- string
- 'null'
format: date
due_amount:
type: number
format: decimal
periods_covered:
type: array
items:
type: object
delivery_method:
type: string
enum:
- EMAIL
- LETTER
- LRAR
tracking_number:
type:
- string
- 'null'
status:
type: string
enum:
- DRAFT
- SENT
- ACKNOWLEDGED
document_url:
type:
- string
- 'null'
notes:
type:
- string
- 'null'
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
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
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