RentCheck Properties V3 API

The Properties V3 API from RentCheck — 4 operation(s) for properties v3.

OpenAPI Specification

rentcheck-properties-v3-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: RentCheck REST Account Settings Properties V3 API
  version: 1.0.0
  description: "\n## Mission\nAt RentCheck, our mission is plain and simple: To make renting fair and transparent for everyone involved. \nRentCheck is a property inspection solution that helps property managers save time and resources with easy self-guided inspections that residents can perform from their smartphone. \n\nWith RentCheck, property managers can avoid tenant coordination, eliminate drive time, and standardize their inspection process. \nWe provides real-time visibility to property managers and owners while bringing transparency to the security deposit deduction process.\n\n## API\nThe RentCheck API lets developers tap into the RentCheck ecosystem, building their own RentCheck-powered applications to enable inspection scheduling and creation and to leverage inspection data for a variety of use cases in the property management, maintenance, and insurance spaces.\n\nThe RentCheck REST API supports JSON requests and responses and features a resource-oriented design that generally adheres to the RFC 7321 HTTP/1.1 standard. \nOur API resources provide access to many RentCheck features, including units, buildings, communities, inspections, and residents.\n\n## Credentials\nIn addition to the Bearer Auth, RentCheck will need to send you an application ID and secret. These are required to generate the required application headers (x-app-id & x-app-secret).\nThese values can be obtained from the [RentCheck API integration page](https://app.getrentcheck.com/account/integrations/rentcheck-api).\n\n## Rate Limiting\nThe RentCheck API enforces rate limits to ensure fair usage and prevent abuse. The rate limits are as follows:\n- **Requests per second**: 8\n- **Requests per minute**: 256\n- **Requests per 10 minutes**: 1024\n\nIf you exceed the rate limits, you will receive a 429 Too Many Requests response.\n\n## Pagination\nWhen interacting with endpoints that return a list of items, the results are paginated to help manage large data sets efficiently. The following parameters control pagination:\n- **page_size** (integer): Defines the number of items returned per page. The maximum allowed value is 250. If a value larger than 250 is provided, it will be automatically clamped to 250. This ensures that the system performs optimally and prevents the server from being overwhelmed by too many items in a single response.\n  - **Maximum**: `250`\n- **page_number** (integer): Indicates the page number to retrieve. Pagination starts at `page 0`. If not specified, the first page (`page 0`) is returned by default.\n### Example Request\n```http\nGET /api/v1/inspections?page_size=300&page_number=2\n```\nIn this example, although the `page_size` parameter is set to `300` **for a query with 1500 total results**, the system will return only `250` items per page, as `300` exceeds the maximum allowed value.\n#### Example Response\n```json\n{\n    \"status\": 200,\n    \"data\": [...],\n    \"count\": 250,\n    \"total_results\": 1500\n}\n```\nThis response shows that the `page_size` has been clamped to `250`, despite the initial request for `300`.\n"
  contact:
    name: RentCheck Support
    email: support@getrentcheck.com
servers:
- url: https://prod-public-api.getrentcheck.com
  description: Production server
security:
- bearerAuth: []
  x-app-id: []
  x-app-secret: []
tags:
- name: Properties V3
paths:
  /v3/properties/buildings:
    get:
      x-internal: true
      summary: Get all buildings (v3 digest)
      tags:
      - Properties V3
      description: 'Returns a paginated list of building property digests. V3 returns a trimmed `api_property_digest`

        projection and uses the `filters[team][value|condition]` syntax (with the legacy `team_id[]` parameter

        still accepted).

        '
      parameters:
      - $ref: '#/components/parameters/V3PropertyListPageSize'
      - $ref: '#/components/parameters/V3PropertyListPageNumber'
      - $ref: '#/components/parameters/V3PropertyListSortBy'
      - $ref: '#/components/parameters/V3PropertyListSortType'
      - in: query
        name: search
        schema:
          type: string
        description: Search string to match building addresses.
      - $ref: '#/components/parameters/V3PropertyListTeamValue'
      - $ref: '#/components/parameters/V3PropertyListTeamCondition'
      - $ref: '#/components/parameters/V3PropertyListTeamIdLegacy'
      - $ref: '#/components/parameters/V3PropertyListLastCompletedStart'
      - $ref: '#/components/parameters/V3PropertyListLastCompletedEnd'
      - $ref: '#/components/parameters/V3PropertyListSynced'
      - $ref: '#/components/parameters/V3PropertyListExtraFields'
      responses:
        '200':
          description: Returns the paginated list of building digests.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/v3_property_list_response_model'
        '400':
          description: 'One of the `filters` values failed validation. Only the `filters`

            object is server-side validated;

            invalid `sort_by` / `sort_type` values do NOT surface as 400.

            '
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: integer
                    example: 400
                  error:
                    type: string
                    example: '"filters.synced" must be one of [synced, not synced]'
        '401':
          $ref: '#/components/responses/401'
  /v3/properties/communities:
    get:
      x-internal: true
      summary: Get all communities (v3 digest)
      tags:
      - Properties V3
      description: 'Returns a paginated list of community property digests. Uses the same filter / pagination shape as

        `/v3/properties/buildings` and `/v3/properties/units`.

        '
      parameters:
      - $ref: '#/components/parameters/V3PropertyListPageSize'
      - $ref: '#/components/parameters/V3PropertyListPageNumber'
      - $ref: '#/components/parameters/V3PropertyListSortBy'
      - $ref: '#/components/parameters/V3PropertyListSortType'
      - in: query
        name: search
        schema:
          type: string
        description: Search string to match community addresses.
      - $ref: '#/components/parameters/V3PropertyListTeamValue'
      - $ref: '#/components/parameters/V3PropertyListTeamCondition'
      - $ref: '#/components/parameters/V3PropertyListTeamIdLegacy'
      - $ref: '#/components/parameters/V3PropertyListLastCompletedStart'
      - $ref: '#/components/parameters/V3PropertyListLastCompletedEnd'
      - $ref: '#/components/parameters/V3PropertyListSynced'
      - $ref: '#/components/parameters/V3PropertyListExtraFields'
      responses:
        '200':
          description: Returns the paginated list of community digests.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/v3_property_list_response_model'
        '400':
          description: 'One of the `filters` values failed validation. Only the `filters`

            object is server-side validated;

            invalid `sort_by` / `sort_type` values do NOT surface as 400.

            '
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: integer
                    example: 400
                  error:
                    type: string
                    example: '"filters.synced" must be one of [synced, not synced]'
        '401':
          $ref: '#/components/responses/401'
  /v3/properties/units:
    get:
      x-internal: true
      summary: Get all units (v3 digest)
      tags:
      - Properties V3
      description: 'Returns a paginated list of unit property digests. Uses the same filter / pagination shape as

        `/v3/properties/buildings` and `/v3/properties/communities`.

        '
      parameters:
      - $ref: '#/components/parameters/V3PropertyListPageSize'
      - $ref: '#/components/parameters/V3PropertyListPageNumber'
      - $ref: '#/components/parameters/V3PropertyListSortBy'
      - $ref: '#/components/parameters/V3PropertyListSortType'
      - in: query
        name: search
        schema:
          type: string
        description: Search string to match unit addresses.
      - $ref: '#/components/parameters/V3PropertyListTeamValue'
      - $ref: '#/components/parameters/V3PropertyListTeamCondition'
      - $ref: '#/components/parameters/V3PropertyListTeamIdLegacy'
      - $ref: '#/components/parameters/V3PropertyListLastCompletedStart'
      - $ref: '#/components/parameters/V3PropertyListLastCompletedEnd'
      - $ref: '#/components/parameters/V3PropertyListSynced'
      - $ref: '#/components/parameters/V3PropertyListExtraFields'
      responses:
        '200':
          description: Returns the paginated list of unit digests.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/v3_property_list_response_model'
        '400':
          description: 'One of the `filters` values failed validation. Only the `filters`

            object is server-side validated;

            invalid `sort_by` / `sort_type` values do NOT surface as 400.

            '
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: integer
                    example: 400
                  error:
                    type: string
                    example: '"filters.synced" must be one of [synced, not synced]'
        '401':
          $ref: '#/components/responses/401'
  /v3/properties/permissions:
    get:
      x-internal: true
      summary: Get property permissions for the current user
      tags:
      - Properties V3
      description: 'Returns the property-level permissions that drive the RentCheck app UI (e.g. whether the user can

        trigger bulk unit imports). Used internally by the mobile and web apps.

        '
      responses:
        '200':
          description: Returns the property permissions for the current user.
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: integer
                    description: HTTP status code
                    example: 200
                  data:
                    $ref: '#/components/schemas/api_properties_permissions'
        '401':
          $ref: '#/components/responses/401'
        '404':
          description: Not Found — `user not found`.
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: integer
                    description: HTTP status code
                    example: 404
                  error:
                    type: string
                    example: user not found
components:
  parameters:
    V3PropertyListSynced:
      in: query
      name: synced
      schema:
        type: string
        enum:
        - synced
        - not synced
      description: Filter by external integration sync status.
    V3PropertyListTeamValue:
      in: query
      name: filters[team][value]
      schema:
        type: string
      description: List of team ids to filter by. Multiple values are concatenated with `|`. When `filters[team][condition]` is supplied, this must resolve to at least one id, so an empty list surfaces as 400 `"filters.teamIds.value" must contain at least 1 items`.
    V3PropertyListPageNumber:
      in: query
      name: page_number
      schema:
        type: integer
        default: 0
        minimum: 0
      description: Zero-indexed page number.
    V3PropertyListPageSize:
      in: query
      name: page_size
      schema:
        type: integer
        default: 20
        minimum: 0
      description: The number of elements in the data collection. Sizes above `250` are clamped to `250` to keep responses bounded (matches the API-wide pagination policy documented in the OpenAPI intro).
    V3PropertyListSortBy:
      in: query
      name: sort_by
      schema:
        type: string
        default: address
        enum:
        - address
        - name
        - last_completed_inspection
      description: Sort results by one of the available fields.
    V3PropertyListLastCompletedEnd:
      in: query
      name: last_completed_inspection_end_date
      schema:
        oneOf:
        - type: string
          format: date
        - type: string
          format: date-time
        - type: string
          enum:
          - ''
      description: ISO-8601 date (`YYYY-MM-DD`) or date-time upper bound for the last completed inspection filter. Both date and date-time forms are accepted, and an empty string is treated as "no filter".
    V3PropertyListExtraFields:
      in: query
      name: extra_fields[]
      schema:
        type: array
        items:
          type: string
      description: Optional list of extra fields to include in each digest (e.g. `last_completed_inspection`).
    V3PropertyListLastCompletedStart:
      in: query
      name: last_completed_inspection_start_date
      schema:
        oneOf:
        - type: string
          format: date
        - type: string
          format: date-time
        - type: string
          enum:
          - ''
      description: ISO-8601 date (`YYYY-MM-DD`) or date-time lower bound for the last completed inspection filter. Both date and date-time forms are accepted, and an empty string is treated as "no filter".
    V3PropertyListTeamIdLegacy:
      in: query
      name: team_id[]
      deprecated: true
      schema:
        type: array
        items:
          type: string
      description: Legacy team id filter. Prefer `filters[team][value]`.
    V3PropertyListTeamCondition:
      in: query
      name: filters[team][condition]
      schema:
        type: string
        enum:
        - any_of
        - none_of
      description: Condition to apply to the team filter.
    V3PropertyListSortType:
      in: query
      name: sort_type
      schema:
        type: string
        default: asc
        pattern: ^(?:[Aa][Ss][Cc]|[Dd][Ee][Ss][Cc])$
        example: asc
      description: Sort direction. Case-insensitive, so `asc`/`ASC`/`Asc` and `desc`/`DESC`/`Desc` are all accepted.
  schemas:
    api_properties_permissions:
      type: object
      required:
      - can_import_units
      properties:
        can_import_units:
          type: boolean
          description: Whether the current user can import units in bulk
    v3_property_list_response_model:
      type: object
      required:
      - status
      - data
      - count
      - total_results
      properties:
        status:
          type: integer
          description: HTTP status code
          example: 200
        data:
          type: array
          items:
            $ref: '#/components/schemas/api_property_digest'
        count:
          type: integer
          description: Amount of elements in `data`.
        total_results:
          type: integer
          description: Amount of total elements according to search criteria.
    api_property_digest:
      type: object
      required:
      - id
      - address
      - city
      - zip_code
      - property_type
      - team
      - last_completed_inspection
      - permissions
      - rooms_info
      properties:
        id:
          type: string
          description: Entity ID
          example: 00BRcZPSakXz6w7RYoE
        address:
          type: string
          description: This is the street address for the <<resource>>.
          example: 2001 Red Gates
        address_2:
          type: string
          description: Additional address information for the <<resource>>.
          example: Apt. 4B
        city:
          type: string
          description: This is the city of the <<resource>>.
          example: New Orleans
        region:
          type: string
          description: The broader region or area in which the <<resource>> is located.
          example: Orleans
        zip_code:
          type: string
          description: This is the Postal Code for the <<resource>>.
          example: '70130'
        name:
          type: string
          description: Human-friendly property name. Optional — when the underlying property has no name the field is omitted from the response rather than serialised as `null` (commonly the case for units).
        property_type:
          type: string
          description: Discriminator value identifying this property as a Unit, Building, or Community. The empty string represents an unset unit subtype.
          enum:
          - Single-Family
          - Multi-Family
          - Apartment or Condo
          - Commercial
          - Building
          - Community
          - ''
        team:
          type: object
          required:
          - id
          - name
          - internal_label
          properties:
            id:
              type: string
              description: Entity ID
              example: 00BRcZPSakXz6w7RYoE
            name:
              type: string
              description: The name field is the Team name that is displayed on recipient facing reports and communication.
              example: The best company
            internal_label:
              type: string
              description: The internal label is a convenience label to help differentiate similar teams a user may belong to. It's displayed to you and your team members.
              example: The best company label
          nullable: true
        last_completed_inspection:
          type: object
          nullable: true
          required:
          - date
          - id
          - type
          properties:
            date:
              type: string
              description: Completion date of the last completed inspection
            id:
              type: string
              description: Entity ID
              example: 00BRcZPSakXz6w7RYoE
            type:
              type: string
        rooms_info:
          type: array
          description: Structured per-room metadata and the source of truth for room labeling. `rooms` and `room_names` are derived from this. `type` is the no-ordinal room kind (e.g. "Bedroom"), `name` is the ordinal name (e.g. "First Bedroom"), and `label` is a human-meaningful label that defaults to `name`.
          items:
            $ref: '#/components/schemas/room_info'
        permissions:
          type: object
          required:
          - can_delete
          - can_create_inspection
          - can_add_to_parent_property
          - can_reassign_team
          properties:
            can_delete:
              type: boolean
            can_create_inspection:
              type: boolean
            can_add_to_parent_property:
              type: boolean
            can_reassign_team:
              type: boolean
        sync_data:
          type: object
          readOnly: true
          nullable: true
          required:
          - vendor
          - last_sync
          description: Sync data for the property, or `null` when the property is not synced from an external integration, with `is_recently_synced` set to `true` when `last_sync` is within the last 7 days.
          properties:
            is_recently_synced:
              type: boolean
            last_sync:
              type: string
              description: Sync date, in ISO format
              example: 2022-12-02 14:15:37.925000
            vendor:
              type: string
              description: The third party vendor for this sync
              enum:
              - rentmanager
              - yardi
              - appfolio
              - jenark
              - rentvine
              - buildium
            status:
              type: string
              description: Latest manual-sync status. Only present on integrations that expose it (e.g. Buildium).
              enum:
              - scheduled
              - processing
              - success
              - error
            error:
              type: string
              nullable: true
              description: Error message from the most recent sync attempt, if any.
            id:
              oneOf:
              - type: string
              - type: integer
              description: External vendor id for the property/unit (string for most vendors; integer for AppFolio).
            x_id:
              type: string
              description: Vendor-native external id echo for the legacy Rentvine / Rent Manager envelope. Kept for debugging/audit parity with the historic `sync_data`.
            location_id:
              type: string
              description: Rent Manager location (property) id — legacy `sync_data`, debugging/audit.
            integration_id:
              type: string
              description: RentCheck integration record id (Rent Manager legacy sync) — debugging/audit.
            short_property_id:
              type: string
              description: AppFolio short property id, when synced from AppFolio.
            short_unit_id:
              type: string
              description: AppFolio short unit id, when synced from AppFolio.
            upload_response:
              type: array
              description: AppFolio per-destination inspection-upload outcomes.
              items:
                type: object
                required:
                - resource
                - resource_id
                - uploaded_id
                properties:
                  resource:
                    type: string
                    enum:
                    - units
                    - properties
                    - occupancies
                  resource_id:
                    type: string
                  uploaded_id:
                    type: string
    room_info:
      type: object
      required:
      - type
      - name
      - label
      description: Structured room entry.
      properties:
        type:
          type: string
          description: The no-ordinal room kind (e.g. "Bedroom"), recomputed from `name` on every write.
          example: Bedroom
        name:
          type: string
          description: The ordinal room name (e.g. "First Bedroom") and the source of truth for the entry.
          example: First Bedroom
        label:
          type: string
          description: Human-meaningful display label that lets multiple rooms of the same kind be differentiated. Defaults to `name`.
          example: First Bedroom
  responses:
    '401':
      description: Unauthorized
      content:
        application/json:
          schema:
            type: object
            properties:
              status:
                type: integer
                description: HTTP status code
                example: 401
              error:
                type: string
                description: Error message
                enum:
                - token is not valid
                - authorization header is empty
                - authorization header is not valid
                - 'format for Authorization must be: Bearer [token]'
                - refresh token is not valid for resources
                - not well-formed token
                example: token is not valid
  securitySchemes:
    bearerAuth:
      description: Authorization key needed to use the API
      type: http
      scheme: bearer
      bearerFormat: JWT
    x-app-id:
      description: Represents the identification of you application
      type: apiKey
      name: x-app-id
      in: header
      required: true
    x-app-secret:
      description: Represents the secret for your application
      type: apiKey
      name: x-app-secret
      in: header
      required: true