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.
Call it yourself
curl for this page
This API
curl "https://apis.io/api/v1/apis/faireplace-com:faireplace-com-documents-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
openapi: 3.2.0
info:
title: FairePlace Property Management Documents 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: Documents
description: Documents attached to a lease.
paths:
/leases/{lease_id}/pdf:
post:
operationId: generateLeasePDF
summary: Generate a lease PDF
description: Generates a PDF document from a lease template with the provided data. Returns the PDF directly as binary with performance headers.
tags:
- Documents
security:
- BearerAuth: []
parameters:
- name: lease_id
in: path
required: true
description: Unique lease ID
schema:
type: string
format: uuid
example: 550e8400-e29b-41d4-a716-446655440000
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/GeneratePdfRequest'
responses:
'200':
description: PDF generated successfully
content:
application/pdf:
schema:
type: string
format: binary
headers:
Content-Disposition:
description: Generated PDF file name
schema:
type: string
example: inline; filename="lease_550e8400-e29b-41d4-a716-446655440000.pdf"
Content-Length:
description: PDF file size in bytes
schema:
type: integer
example: 524288
X-Generation-Time:
description: Generation time in seconds
schema:
type: string
example: '0.125'
X-Performance-Category:
description: Performance category (EXCELLENT, GOOD, STANDARD)
schema:
type: string
enum:
- EXCELLENT (Cache Hit)
- GOOD (Optimized)
- STANDARD (Cache Miss)
example: EXCELLENT (Cache Hit)
'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}/pdfs:
get:
operationId: listLeasePdfs
summary: List lease PDFs
description: Retrieves the list of all generated PDFs for a specific lease
tags:
- Documents
security:
- BearerAuth: []
parameters:
- name: lease_id
in: path
required: true
description: Unique lease ID
schema:
type: string
format: uuid
example: 550e8400-e29b-41d4-a716-446655440000
responses:
'200':
description: PDF list retrieved successfully
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/GeneratedPdf'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'500':
$ref: '#/components/responses/InternalServerError'
/leases/pdf/{pdf_id}:
get:
operationId: downloadLeasePDF
summary: Download a lease PDF
description: Downloads a generated PDF document for a lease
tags:
- Documents
security:
- BearerAuth: []
parameters:
- name: pdf_id
in: path
required: true
description: Unique generated PDF ID
schema:
type: string
format: uuid
example: 550e8400-e29b-41d4-a716-446655440000
responses:
'200':
description: PDF downloaded successfully
content:
application/pdf:
schema:
type: string
format: binary
headers:
Content-Disposition:
description: PDF file name
schema:
type: string
example: attachment; filename="lease-550e8400-e29b-41d4-a716-446655440000.pdf"
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'500':
$ref: '#/components/responses/InternalServerError'
delete:
operationId: deleteLeasePDF
summary: Delete a lease PDF
description: Deletes a generated PDF document for a lease
tags:
- Documents
security:
- BearerAuth: []
parameters:
- name: pdf_id
in: path
required: true
description: Unique generated PDF ID
schema:
type: string
format: uuid
example: 550e8400-e29b-41d4-a716-446655440000
responses:
'200':
description: PDF deleted successfully
content:
application/json:
schema:
type: object
properties:
message:
type: string
example: PDF deleted successfully
'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:
GeneratedPdf:
type: object
description: Generated PDF metadata
required:
- id
- lease_id
- template_id
- template_type
- file_path
- file_size
- creation_timestamp
properties:
id:
type: string
format: uuid
description: Unique identifier of the generated PDF
example: 550e8400-e29b-41d4-a716-446655440000
lease_id:
type: string
format: uuid
description: Associated lease ID
example: 550e8400-e29b-41d4-a716-446655440001
template_id:
type: string
format: uuid
description: Template ID used
example: 550e8400-e29b-41d4-a716-446655440002
template_type:
type: string
description: Template type used
example: LeaseContract
enum:
- LeaseContract
- Amendment
- InventoryReport
- RentReceipt
- NoticeToVacate
- OtherDocument
file_path:
type: string
description: Path or URL of the generated PDF file
example: https://storage.example.com/pdfs/lease_contract_123.pdf
file_size:
type: integer
format: int64
description: File size in bytes
example: 524288
minimum: 0
creation_timestamp:
type: string
format: date-time
description: PDF creation date and time
example: '2024-01-15T10:30:00Z'
custom_variables:
type:
- object
- 'null'
description: Custom variables used during generation
additionalProperties: true
PdfFormFieldPosition:
type: object
description: Position of a form field in the PDF
required:
- page
- x
- y
properties:
page:
type: integer
description: Page number (starts at 1)
example: 1
minimum: 1
x:
type: number
format: float
description: X position in millimeters
example: 50.5
minimum: 0
y:
type: number
format: float
description: Y position in millimeters
example: 100
minimum: 0
width:
type:
- number
- 'null'
format: float
description: Field width in millimeters
example: 80
minimum: 0
height:
type:
- number
- 'null'
format: float
description: Field height in millimeters
example: 20
minimum: 0
PdfFormatOptions:
type: object
description: PDF formatting options
properties:
paper_size:
type:
- string
- 'null'
description: Paper size (A4, Letter, Legal, etc.)
default: A4
example: A4
margins:
type:
- object
- 'null'
allOf:
- $ref: '#/components/schemas/PdfMargins'
font_size:
type:
- number
- 'null'
format: double
description: Font size in points
default: 12
example: 12
minimum: 6
maximum: 72
add_metadata:
type:
- boolean
- 'null'
description: Add metadata to the PDF
default: true
example: true
custom_variables:
type:
- object
- 'null'
description: Custom variables for the template
additionalProperties: true
pdf_standard:
type:
- string
- 'null'
description: PDF standard to comply with (PDF/A-1b, PDF/A-2b, etc.)
example: PDF/A-1b
page_ranges:
type:
- array
- 'null'
description: Page ranges to include (e.g., ['1-5', '10'])
items:
type: string
example:
- 1-5
- '10'
compress:
type:
- boolean
- 'null'
description: Compress the PDF
default: false
example: false
add_form_fields:
type:
- boolean
- 'null'
description: Add interactive form fields
default: false
example: false
custom_form_fields:
type:
- array
- 'null'
description: Custom form fields
items:
$ref: '#/components/schemas/PdfFormField'
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
PdfMargins:
type: object
description: PDF document margins in millimeters
properties:
top:
type: number
format: float
description: Top margin
default: 25
example: 25
minimum: 0
right:
type: number
format: float
description: Right margin
default: 25
example: 25
minimum: 0
bottom:
type: number
format: float
description: Bottom margin
default: 25
example: 25
minimum: 0
left:
type: number
format: float
description: Left margin
default: 25
example: 25
minimum: 0
PdfFormField:
type: object
description: Custom PDF form field
required:
- field_name
- field_type
- position
properties:
field_name:
type: string
description: Form field name
example: tenant_signature
maxLength: 100
field_type:
type: string
description: Form field type
enum:
- text
- signature
- checkbox
- radio
- dropdown
- date
- number
example: signature
position:
$ref: '#/components/schemas/PdfFormFieldPosition'
label:
type:
- string
- 'null'
description: Field label
example: Tenant signature
maxLength: 255
placeholder:
type:
- string
- 'null'
description: Help text
example: Sign here
maxLength: 255
required:
type: boolean
description: Required field
default: false
example: true
validation_rules:
type:
- object
- 'null'
description: Validation rules
additionalProperties: true
example:
min_length: 3
max_length: 50
pattern: ^[A-Za-z\s]+$
default_value:
type:
- string
- 'null'
description: Default value
example: ''
options:
type:
- array
- 'null'
description: Options for dropdown/radio field types
items:
type: string
example:
- Option 1
- Option 2
- Option 3
GeneratePdfRequest:
type: object
description: Request to generate a lease PDF
required:
- template_id
- template_type
- data
properties:
template_id:
type: string
format: uuid
description: Document template ID to use
example: 550e8400-e29b-41d4-a716-446655440000
template_type:
type: string
description: Template type (LeaseContract, Amendment, InventoryReport, etc.)
example: LeaseContract
enum:
- LeaseContract
- Amendment
- InventoryReport
- RentReceipt
- NoticeToVacate
- OtherDocument
data:
type: object
description: Data to insert into the template (JSON format)
additionalProperties: true
example:
tenant_name: Jean Dupont
property_address: 123 Rue de la Paix, 75001 Paris
rent_amount: 850
format_options:
$ref: '#/components/schemas/PdfFormatOptions'
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