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-types-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 Types 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: Types
description: Property, room, and equipment types
paths:
/types/places:
get:
operationId: listPlaceTypes
summary: List place types
description: 'Retrieves the list of all available place types in the system.
Place types define the category of a property (e.g., Residential building, Detached house, Commercial premises).'
tags:
- Types
security:
- BearerAuth: []
responses:
'200':
description: Place types retrieved successfully
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/PlaceType'
example:
- id: 550e8400-e29b-41d4-a716-446655440000
name: Residential building
created_at: '2024-01-15T10:30:00Z'
updated_at: '2024-01-15T10:30:00Z'
- id: 550e8400-e29b-41d4-a716-446655440001
name: Detached house
created_at: '2024-01-15T10:30:00Z'
updated_at: '2024-01-15T10:30:00Z'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'500':
$ref: '#/components/responses/InternalServerError'
post:
operationId: createNewPlaceType
summary: Create a new place type
description: 'Creates a new place type in the system.
This operation requires write permissions on properties.'
tags:
- Types
security:
- BearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreatePlaceType'
example:
name: Commercial building
responses:
'201':
description: Place type created successfully
content:
application/json:
schema:
$ref: '#/components/schemas/PlaceType'
example:
id: 550e8400-e29b-41d4-a716-446655440010
name: Commercial building
created_at: '2024-01-15T10:30:00Z'
updated_at: '2024-01-15T10:30:00Z'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'409':
$ref: '#/components/responses/Conflict'
'422':
$ref: '#/components/responses/UnprocessableEntity'
'500':
$ref: '#/components/responses/InternalServerError'
/types/estates:
get:
operationId: listPropertyTypes
summary: List property types
description: 'Retrieves the list of all available property types in the system.
Property types define the configuration of a dwelling (e.g., Apartment, Studio, 1-bedroom, 2-bedroom, 3-bedroom, etc.).'
tags:
- Types
security:
- BearerAuth: []
responses:
'200':
description: Property types retrieved successfully
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/EstateType'
example:
- id: 550e8400-e29b-41d4-a716-446655440002
name: 3-bedroom apartment
created_at: '2024-01-15T10:30:00Z'
updated_at: '2024-01-15T10:30:00Z'
- id: 550e8400-e29b-41d4-a716-446655440003
name: Studio
created_at: '2024-01-15T10:30:00Z'
updated_at: '2024-01-15T10:30:00Z'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'500':
$ref: '#/components/responses/InternalServerError'
post:
operationId: createNewPropertyType
summary: Create a new property type
description: 'Creates a new property type in the system.
This operation requires write permissions on properties.'
tags:
- Types
security:
- BearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateEstateType'
example:
name: Furnished studio
responses:
'201':
description: Property type created successfully
content:
application/json:
schema:
$ref: '#/components/schemas/EstateType'
example:
id: 550e8400-e29b-41d4-a716-446655440011
name: Furnished studio
created_at: '2024-01-15T10:30:00Z'
updated_at: '2024-01-15T10:30:00Z'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'409':
$ref: '#/components/responses/Conflict'
'422':
$ref: '#/components/responses/UnprocessableEntity'
'500':
$ref: '#/components/responses/InternalServerError'
/types/rooms:
get:
operationId: listRoomTypes
summary: List room types
description: 'Retrieves the list of all available room types in the system.
Room types define the different rooms of a property (e.g., Living room, Bedroom, Kitchen, Bathroom, etc.).
The `counts_towards_habitable` field indicates whether the room counts toward the habitable area according to the Carrez Law.'
tags:
- Types
security:
- BearerAuth: []
responses:
'200':
description: Room types retrieved successfully
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/RoomType'
example:
- id: 550e8400-e29b-41d4-a716-446655440004
name: Living room
counts_towards_habitable: true
created_at: '2024-01-15T10:30:00Z'
updated_at: '2024-01-15T10:30:00Z'
- id: 550e8400-e29b-41d4-a716-446655440005
name: Bedroom
counts_towards_habitable: true
created_at: '2024-01-15T10:30:00Z'
updated_at: '2024-01-15T10:30:00Z'
- id: 550e8400-e29b-41d4-a716-446655440006
name: Cellar
counts_towards_habitable: false
created_at: '2024-01-15T10:30:00Z'
updated_at: '2024-01-15T10:30:00Z'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'500':
$ref: '#/components/responses/InternalServerError'
post:
operationId: createNewRoomType
summary: Create a new room type
description: 'Creates a new room type in the system.
This operation requires write permissions on properties.
The `counts_towards_habitable` field determines whether the room counts toward the habitable area according to the Carrez Law.'
tags:
- Types
security:
- BearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateRoomType'
example:
name: Office
counts_towards_habitable: true
responses:
'201':
description: Room type created successfully
content:
application/json:
schema:
$ref: '#/components/schemas/RoomType'
example:
id: 550e8400-e29b-41d4-a716-446655440011
name: Office
counts_towards_habitable: true
created_at: '2024-01-15T10:30:00Z'
updated_at: '2024-01-15T10:30:00Z'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'409':
$ref: '#/components/responses/Conflict'
'422':
$ref: '#/components/responses/UnprocessableEntity'
'500':
$ref: '#/components/responses/InternalServerError'
/types/equipment:
get:
operationId: listEquipmentTypes
summary: List equipment types
description: 'Retrieves the list of all available equipment types in the system.
Equipment types define the equipment available in a property (e.g., Heating, Air conditioning, Elevator, etc.).'
tags:
- Types
security:
- BearerAuth: []
responses:
'200':
description: Equipment types retrieved successfully
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/EquipmentType'
example:
- id: 550e8400-e29b-41d4-a716-446655440007
name: Central heating
created_at: '2024-01-15T10:30:00Z'
updated_at: '2024-01-15T10:30:00Z'
- id: 550e8400-e29b-41d4-a716-446655440008
name: Air conditioning
created_at: '2024-01-15T10:30:00Z'
updated_at: '2024-01-15T10:30:00Z'
- id: 550e8400-e29b-41d4-a716-446655440009
name: Elevator
created_at: '2024-01-15T10:30:00Z'
updated_at: '2024-01-15T10:30:00Z'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'500':
$ref: '#/components/responses/InternalServerError'
post:
operationId: createNewEquipmentType
summary: Create a new equipment type
description: 'Creates a new equipment type in the system.
This operation requires write permissions on properties.'
tags:
- Types
security:
- BearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateEquipmentType'
example:
name: Reversible air conditioning
responses:
'201':
description: Equipment type created successfully
content:
application/json:
schema:
$ref: '#/components/schemas/EquipmentType'
example:
id: 550e8400-e29b-41d4-a716-446655440010
name: Reversible air conditioning
created_at: '2024-01-15T10:30:00Z'
updated_at: '2024-01-15T10:30:00Z'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'409':
$ref: '#/components/responses/Conflict'
'422':
$ref: '#/components/responses/UnprocessableEntity'
'500':
$ref: '#/components/responses/InternalServerError'
/types/inventory:
get:
operationId: listInventoryTypes
summary: List inventory types
description: 'Lists all inventory types for the tenant.
```bash
curl -X GET https://api.faireplace.com/api/types/inventory \
-H "Authorization: Bearer YOUR_API_KEY"
```'
tags:
- Types
security:
- BearerAuth: []
responses:
'200':
description: List of inventory types.
content:
application/json:
schema:
$ref: '#/components/schemas/InventoryTypeList'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'500':
$ref: '#/components/responses/InternalServerError'
post:
operationId: createInventoryType
summary: Create an inventory type
description: 'Creates a new inventory type. Unknown fields in the body are rejected.
```bash
curl -X POST https://api.faireplace.com/api/types/inventory \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d ''{
"name": "Appliances",
"description": "Kitchen and home appliances",
"category_id": "550e8400-e29b-41d4-a716-446655440001",
"is_active": true
}''
```'
tags:
- Types
security:
- BearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateInventoryType'
examples:
create:
summary: Create an inventory type
value:
name: Appliances
description: Kitchen and home appliances
category_id: 550e8400-e29b-41d4-a716-446655440001
is_active: true
responses:
'201':
description: Inventory type created.
content:
application/json:
schema:
$ref: '#/components/schemas/InventoryType'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'422':
$ref: '#/components/responses/UnprocessableEntity'
'500':
$ref: '#/components/responses/InternalServerError'
/types/inventory/{id}:
get:
operationId: getInventoryType
summary: Get an inventory type
description: 'Retrieves a single inventory type by its identifier.
```bash
curl -X GET https://api.faireplace.com/api/types/inventory/550e8400-e29b-41d4-a716-446655440000 \
-H "Authorization: Bearer YOUR_API_KEY"
```'
tags:
- Types
security:
- BearerAuth: []
parameters:
- name: id
in: path
required: true
schema:
type: string
format: uuid
responses:
'200':
description: The inventory type.
content:
application/json:
schema:
$ref: '#/components/schemas/InventoryType'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'500':
$ref: '#/components/responses/InternalServerError'
put:
operationId: updateInventoryType
summary: Update an inventory type
description: 'Updates an inventory type. All fields are optional; only the fields
provided are updated (partial update).
```bash
curl -X PUT https://api.faireplace.com/api/types/inventory/550e8400-e29b-41d4-a716-446655440000 \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d ''{ "name": "Updated Name", "is_active": false }''
```'
tags:
- Types
security:
- BearerAuth: []
parameters:
- name: id
in: path
required: true
schema:
type: string
format: uuid
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateInventoryType'
examples:
update:
summary: Partial update
value:
name: Updated Name
is_active: false
responses:
'200':
description: The updated inventory type.
content:
application/json:
schema:
$ref: '#/components/schemas/InventoryType'
'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'
delete:
operationId: deleteInventoryType
summary: Delete an inventory type
description: 'Deletes an inventory type by its identifier.
```bash
curl -X DELETE https://api.faireplace.com/api/types/inventory/550e8400-e29b-41d4-a716-446655440000 \
-H "Authorization: Bearer YOUR_API_KEY"
```'
tags:
- Types
security:
- BearerAuth: []
parameters:
- name: id
in: path
required: true
schema:
type: string
format: uuid
responses:
'204':
description: Inventory type deleted (no content).
'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'
NotFound:
description: Not found
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
Conflict:
description: Conflict
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
InternalServerError:
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
UnprocessableEntity:
description: Unprocessable Entity
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:
CreateEquipmentType:
type: object
description: Data for creating a new equipment type
required:
- name
properties:
name:
type: string
description: Name of the equipment type to create
example: Reversible air conditioning
maxLength: 255
minLength: 1
EstateType:
type: object
description: Property type (e.g., Apartment, Studio, 1-bedroom, 2-bedroom, 3-bedroom, etc.)
properties:
id:
type:
- string
- 'null'
format: uuid
description: Unique identifier of the property type
example: 550e8400-e29b-41d4-a716-446655440001
name:
type:
- string
- 'null'
description: Property type name
example: 3-bedroom apartment
maxLength: 255
created_at:
type:
- string
- 'null'
format: date-time
description: Creation date and time
example: '2024-01-15T10:30:00Z'
updated_at:
type:
- string
- 'null'
format: date-time
description: Last modification date and time
example: '2024-01-15T10:30:00Z'
required:
- id
- name
- created_at
- updated_at
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
UpdateInventoryType:
type: object
description: 'Request to update an inventory type. All fields are optional; only the
fields provided are updated (partial update).
'
properties:
name:
type: string
minLength: 1
maxLength: 100
description: New name.
example: Updated Name
description:
type:
- string
- 'null'
maxLength: 500
description: New description.
example: Updated description
category_id:
type:
- string
- 'null'
format: uuid
description: New category reference.
example: 550e8400-e29b-41d4-a716-446655440001
is_active:
type: boolean
description: New active flag.
example: false
CreateInventoryType:
type: object
description: 'Request to create an inventory type. Unknown fields are rejected
(`deny_unknown_fields`). Timestamps are server-generated.
'
additionalProperties: false
required:
- name
properties:
name:
type: string
minLength: 1
maxLength: 100
description: Name of the inventory type.
example: Appliances
description:
type:
- string
- 'null'
maxLength: 500
description: Optional description.
example: Kitchen and home appliances
category_id:
type:
- string
- 'null'
format: uuid
description: Optional reference to the inventory category.
example: 550e8400-e29b-41d4-a716-446655440001
is_active:
type: boolean
description: Whether the type is active. Defaults to `true` when omitted.
example: true
CreateEstateType:
type: object
description: Data for creating a new property type
required:
- name
properties:
name:
type: string
description: Name of the property type to create
example: Furnished studio
maxLength: 255
minLength: 1
InventoryTypeList:
type: array
description: List of inventory types.
items:
$ref: '#/components/schemas/InventoryType'
CreatePlaceType:
type: object
description: Data for creating a new place type
required:
- name
properties:
name:
type: string
description: Name of the place type to create
example: Commercial building
maxLength: 255
minLength: 1
CreateRoomType:
type: object
description: Data for creating a new room type
required:
- name
- counts_towards_habitable
properties:
name:
type: string
description: Name of the room type to create
example: Office
maxLength: 255
minLength: 1
counts_towards_habitable:
type: boolean
description: Indicates whether this room counts toward the habitable area (Carrez law)
example: true
default: true
EquipmentType:
type: object
description: Equipment type available in a property (e.g., Heating, Air conditioning, Elevator, etc.)
properties:
id:
type:
- string
- 'null'
format: uuid
description: Unique identifier of the equipment type
example: 550e8400-e29b-41d4-a716-446655440003
name:
type:
- string
- 'null'
description: Equipment type name
example: Central heating
maxLength: 255
created_at:
type:
- string
- 'null'
format: date-time
description: Creation date and time
example: '2024-01-15T10:30:00Z'
updated_at:
type:
- string
- 'null'
format: date-time
description: Last modification date and time
example: '2024-01-15T10:30:00Z'
required:
- id
- name
- created_at
- updated_at
InventoryType:
type: object
description: 'An inventory type (a category-of-thing used when describing inventory).
Field names match the JSON payload exactly (snake_case, no renaming).
'
required:
- id
- name
- is_active
- created_at
- updated_at
properties:
id:
type: string
format: uuid
description: Unique inventory type identifier (server-generated).
example: 550e8400-e29b-41d4-a716-446655440000
name:
type: string
minLength: 1
maxLength: 100
description: Name of the inventory type.
example: Furniture
description:
type:
- string
- 'null'
maxLength: 500
description: Optional description.
example: Household furniture items
category_id:
type:
- string
- 'null'
format: uuid
description: Optional reference to the inventory category this type belongs to.
example: 550e8400-e29b-41d4-a716-446655440001
is_active:
type: boolean
description: Whether the inventory type is active.
example: true
created_at:
type: string
format: date-time
description: Creation timestamp (ISO 8601).
example: '2026-06-20T10:30:00'
updated_at:
type: string
format: date-time
description: Last update timestamp (ISO 8601).
example: '2026-06-20T10:30:00'
PlaceType:
type: object
description: Place type (e.g., Apartment building, Detached house, Commercial premises)
properties:
id:
type:
- string
- 'null'
format: uuid
description: Unique identifier of the place type
example: 550e8400-e29b-41d4-a716-446655440000
name:
type:
- string
- 'null'
description: Place type name
example: Residential building
maxLength: 255
created_at:
type:
- string
- 'null'
format: date-time
description: Creation date and time
example: '2024-01-15T10:30:00Z'
updated_at:
type:
- string
- 'null'
format: date-time
description: Last modification date and time
example: '2024-01-15T10:30:00Z'
required:
- id
- name
- created_at
- updated_at
RoomType:
type: object
description: Room type in a property (e.g., Living room, Bedroom, Kitchen, Bathroom, etc.)
properties:
id:
type:
- string
- 'null'
format: uuid
description: Unique identifier of the room type
example: 550e8400-e29b-41d4-a716-446655440002
name:
type:
- string
- 'null'
description: Room type name
example: Living room
maxLength: 255
counts_towards_habitable:
type:
- boolean
- 'null'
description: Indicates whether this room counts toward the habitable area (Carrez law)
example: true
default: true
created_at:
type:
- string
- 'null'
format: date-time
description: Creation date and time
example: '2024-01-15T10:30:00Z'
updated_at:
type:
- string
- 'null'
format: date-time
description: Last modification date and time
example: '2024-01-15T10:30:00Z'
required:
- id
- name
- counts_towards_habitable
- created_at
- updated_at
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