FairePlace Syndic Management API
Building management companies (syndics) and their relationship to a property.
Building management companies (syndics) and their relationship to a property.
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-syndic-management-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 Syndic Management 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: Syndic Management
description: Building management companies (syndics) and their relationship to a property.
paths:
/syndics:
get:
operationId: listSyndics
summary: List all syndics
description: Returns all syndics for the current tenant.
tags:
- Syndic Management
security:
- BearerAuth: []
responses:
'200':
description: List of syndics
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/SyndicResponse'
'401':
$ref: '#/components/responses/Unauthorized'
/syndics/{syndic_id}:
get:
operationId: getSyndic
summary: Get a syndic by ID
tags:
- Syndic Management
security:
- BearerAuth: []
parameters:
- name: syndic_id
in: path
required: true
schema:
type: string
format: uuid
responses:
'200':
description: Syndic details
content:
application/json:
schema:
$ref: '#/components/schemas/SyndicResponse'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
put:
operationId: updateSyndic
summary: Update a syndic
tags:
- Syndic Management
security:
- BearerAuth: []
parameters:
- name: syndic_id
in: path
required: true
schema:
type: string
format: uuid
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateSyndicDto'
responses:
'200':
description: Syndic updated
content:
application/json:
schema:
$ref: '#/components/schemas/SyndicResponse'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
delete:
operationId: deleteSyndic
summary: Delete a syndic
tags:
- Syndic Management
security:
- BearerAuth: []
parameters:
- name: syndic_id
in: path
required: true
schema:
type: string
format: uuid
responses:
'204':
description: Syndic deleted
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
/estates/{estate_id}/syndic:
post:
operationId: createSyndicForEstate
summary: Create a syndic for an estate
description: Creates a new syndic management company linked to an estate.
tags:
- Syndic Management
security:
- BearerAuth: []
parameters:
- name: estate_id
in: path
required: true
schema:
type: string
format: uuid
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateSyndicDto'
responses:
'201':
description: Syndic created
content:
application/json:
schema:
$ref: '#/components/schemas/SyndicResponse'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'409':
description: A syndic already exists for this estate
get:
operationId: getSyndicByEstate
summary: Get syndic for an estate
description: Returns the syndic linked to a specific estate (1:1 relationship).
tags:
- Syndic Management
security:
- BearerAuth: []
parameters:
- name: estate_id
in: path
required: true
schema:
type: string
format: uuid
responses:
'200':
description: Syndic for this estate
content:
application/json:
schema:
$ref: '#/components/schemas/SyndicResponse'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
components:
schemas:
UpdateSyndicDto:
type: object
description: Data for updating a syndic (all fields optional)
properties:
name:
type:
- string
- 'null'
siren:
type:
- string
- 'null'
address:
type:
- string
- 'null'
contact_email:
type:
- string
- 'null'
contact_phone:
type:
- string
- 'null'
contract_start:
type:
- string
- 'null'
format: date
contract_end:
type:
- string
- 'null'
format: date
management_fee:
type:
- number
- 'null'
format: decimal
is_active:
type:
- boolean
- 'null'
notes:
type:
- string
- 'null'
CreateSyndicDto:
type: object
description: Data for creating a syndic
required:
- name
- contract_start
properties:
name:
type: string
description: Syndic company name
siren:
type:
- string
- 'null'
description: SIREN number (9 digits)
address:
type:
- string
- 'null'
contact_email:
type:
- string
- 'null'
contact_phone:
type:
- string
- 'null'
contract_start:
type: string
format: date
contract_end:
type:
- string
- 'null'
format: date
management_fee:
type:
- number
- 'null'
format: decimal
notes:
type:
- string
- '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
SyndicResponse:
type: object
description: Syndic (copropriété management company) response
required:
- id
- estate_id
- name
- contract_start
- is_active
- created_at
- updated_at
properties:
id:
type: string
format: uuid
estate_id:
type: string
format: uuid
description: ID of the estate managed by this syndic
name:
type: string
description: Syndic company name
siren:
type:
- string
- 'null'
description: SIREN number (9 digits)
address:
type:
- string
- 'null'
contact_email:
type:
- string
- 'null'
contact_phone:
type:
- string
- 'null'
contract_start:
type: string
format: date
description: Start date of the syndic management contract
contract_end:
type:
- string
- 'null'
format: date
description: End date of the syndic management contract
management_fee:
type:
- number
- 'null'
format: decimal
description: Annual management fee
is_active:
type: boolean
notes:
type:
- string
- 'null'
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
responses:
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