RentCheck Inspections API

The Inspections API from RentCheck — 26 operation(s) for inspections.

OpenAPI Specification

rentcheck-inspections-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: RentCheck REST Account Settings Inspections 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: Inspections
paths:
  /v1/inspections/{inspectionId}/events:
    post:
      x-internal: true
      summary: Record an event against an inspection
      tags:
      - Inspections
      description: 'Appends a single event to an inspection''s timeline. Used by internal

        surfaces (web/mobile) to record activity such as reminder sends,

        signature requests, reviewer notes, etc.


        The request body accepts every inspection event type except

        `inspection_invitee_self_removed`, which is generated server-side.

        '
      parameters:
      - name: inspectionId
        in: path
        required: true
        description: Inspection ID
        schema:
          type: string
          minLength: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/inspection_event_create_request_model'
      responses:
        '200':
          description: Returns the created event.
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: integer
                    description: HTTP status code
                    example: 200
                  data:
                    $ref: '#/components/schemas/api_inspection_event'
        '400':
          description: Bad request — `type` is missing or not a valid inspection event type.
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: integer
                    example: 400
                  error:
                    type: string
        '401':
          $ref: '#/components/responses/401'
        '404':
          description: Not Found — `inspection not found`, or `user not found` when the authenticated userId no longer resolves.
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: integer
                    description: HTTP status code
                    example: 404
                  error:
                    type: string
                    example: inspection not found
    get:
      x-internal: true
      summary: Get all events for an inspection
      tags:
      - Inspections
      description: 'Returns the timeline of events recorded against an inspection (status

        changes, reminders, signature requests, reviewer activity, etc.).


        The caller must already have access to the inspection — the same access

        check used by `GET /v1/inspections/{inspectionId}` runs first and

        surfaces the standard 404 / permission errors.

        '
      parameters:
      - name: inspectionId
        in: path
        required: true
        description: Inspection ID
        schema:
          type: string
          minLength: 1
      responses:
        '200':
          description: Returns the inspection's events ordered by timestamp.
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: integer
                    description: HTTP status code
                    example: 200
                  data:
                    $ref: '#/components/schemas/inspection_events_get_all_response_model'
                  count:
                    type: integer
                    description: Amount of elements in `data`.
        '401':
          $ref: '#/components/responses/401'
        '404':
          description: Not Found — `inspection not found`.
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: integer
                    description: HTTP status code
                    example: 404
                  error:
                    type: string
                    example: inspection not found
  /v1/inspections/{inspectionId}/rate:
    post:
      x-internal: true
      summary: Rate an inspection
      tags:
      - Inspections
      description: 'Records a numeric rating and free-form feedback left by the performer about the inspection

        experience. Displayed alongside the inspection in the dashboard.

        '
      parameters:
      - name: inspectionId
        in: path
        description: Inspection ID
        required: true
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/inspection_rate_request_model'
      responses:
        '200':
          description: Returns the stored rating.
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: integer
                    description: HTTP status code
                    example: 200
                  data:
                    $ref: '#/components/schemas/inspection_rate_response_model'
        '400':
          description: 'Bad request — request body validation failed (e.g. `data.rating` is not an integer

            between 1 and 5, `data.feedback` is shorter than 3 characters).

            '
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: integer
                    description: HTTP status code
                    example: 400
                  error:
                    type: string
        '401':
          $ref: '#/components/responses/401'
        '404':
          description: 'Not Found — `inspection not found` or `user not found`. The

            underlying access check maps missing-user and permission failures to

            these strings.

            '
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: integer
                    description: HTTP status code
                    example: 404
                  error:
                    type: string
                    example: inspection not found
  /v1/inspections/{inspectionId}/reject:
    post:
      x-internal: true
      summary: Reject an inspection
      tags:
      - Inspections
      description: 'Rejects a submitted inspection with a note and a new due date, optionally flagging specific

        features that require revision. Sends notifications to the original performer(s). The response

        body lists the email events emitted as part of the rejection notification.

        '
      parameters:
      - name: inspectionId
        in: path
        description: Inspection ID
        required: true
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/inspection_reject_request_model'
      responses:
        '200':
          description: Returns the list of email events emitted by the rejection.
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: integer
                    description: HTTP status code
                    example: 200
                  data:
                    $ref: '#/components/schemas/inspection_reject_response_model'
        '400':
          description: 'Bad request — request body validation failed. Messages include

            `"data.rejection.note" is required`, `"data.rejection.due_date" is required`,

            and `"data.rejection.features" is required`.

            '
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: integer
                    description: HTTP status code
                    example: 400
                  error:
                    type: string
        '401':
          $ref: '#/components/responses/401'
        '404':
          description: Not Found — `inspection not found` or `user not found`.
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: integer
                    description: HTTP status code
                    example: 404
                  error:
                    type: string
                    example: inspection not found
  /v1/inspections/reminders:
    post:
      x-internal: true
      summary: Send reminders for one or more inspections
      tags:
      - Inspections
      description: 'Sends an email and/or sms reminder about one or more inspection invites. The request body

        groups recipients by invite; the response surfaces per-channel success and error breakdowns

        so the caller can report partial failures.

        '
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/inspection_send_reminders_request_model'
      responses:
        '200':
          description: Returns the per-channel reminder status.
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: integer
                    description: HTTP status code
                    example: 200
                  data:
                    $ref: '#/components/schemas/inspection_send_reminders_response_model'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: integer
                    description: HTTP status code
                    example: 400
                  error:
                    type: string
                    enum:
                    - recipients is missing
                    - message is missing
                    - channels is missing
                    example: recipients is missing
        '401':
          $ref: '#/components/responses/inspection_access_unauthorized'
  /v1/inspections/{inspectionId}/scan:
    post:
      x-internal: true
      summary: Queue a manual AI damage scan for an inspection
      tags:
      - Inspections
      description: "Enqueues a manual AI damage-detection scan against a completed inspection\nand returns the throttle record clients poll for progress.\n\nGuards enforced before enqueue:\n  - Caller must be on an active Pro Plan (returns 404 `subscription not found`\n    when no subscription record exists, otherwise 403 with the\n    Pro-Plan-required message).\n  - The account must have manual AI damage detection enabled.\n  - The inspection must exist, be completed, and have inspection metadata.\n  - The inspection must not already have a previous scan.\n  - The caller must have manual-scan permissions and access to the\n    inspection.\n"
      parameters:
      - name: inspectionId
        in: path
        description: Inspection ID.
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Returns the queued throttle record.
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: integer
                    description: HTTP status code
                    example: 200
                  data:
                    $ref: '#/components/schemas/inspection_manual_scan_response_model'
        '400':
          description: 'Bad request — the inspection exists but is not yet completed.

            '
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: integer
                    description: HTTP status code
                    example: 400
                  error:
                    type: string
                    enum:
                    - Inspection is not completed
                    example: Inspection is not completed
        '401':
          $ref: '#/components/responses/401'
        '403':
          description: 'Forbidden — the caller is on a non-Pro or inactive plan, the org has

            manual scanning disabled (`Manual sync setting is false for subscription`),

            the caller lacks the manual-scan permission (`invalid permissions`), or

            the caller lacks access to the inspection team

            (`User must be a member of the team`).

            '
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: integer
                    description: HTTP status code
                    example: 403
                  error:
                    type: string
                    enum:
                    - This feature is only available on the Professional plan.
                    - Manual sync setting is false for subscription
                    - invalid permissions
                    - User must be a member of the team
                    example: invalid permissions
        '404':
          description: 'Not Found — the caller has no subscription (`subscription not found`),

            the target inspection does not exist (`inspection not found`), or its

            inspection metadata is missing (`inspection metadata not found`).

            '
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: integer
                    description: HTTP status code
                    example: 404
                  error:
                    type: string
                    enum:
                    - subscription not found
                    - inspection not found
                    - inspection metadata not found
                    example: inspection not found
        '409':
          description: 'Conflict — a previous scan already exists for this inspection.

            '
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: integer
                    description: HTTP status code
                    example: 409
                  error:
                    type: string
                    enum:
                    - Inspection has already had a manual scan
                    example: Inspection has already had a manual scan
        '500':
          description: 'Internal server error — the throttle queue rejected the enqueue.

            '
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: integer
                    description: HTTP status code
                    example: 500
                  error:
                    type: string
                    enum:
                    - Unable to queue inspection scan
                    example: Unable to queue inspection scan
  /v1/inspections/{inspectionId}/share:
    post:
      x-internal: true
      summary: Share an inspection PDF
      tags:
      - Inspections
      description: 'Queues a PDF copy of the inspection report and emails it to the provided recipients.

        PDF generation and email delivery happen asynchronously — the response contains a

        `fileRequestId` that can be polled via `GET /v1/fileRequests/{fileRequestId}` for status.

        '
      parameters:
      - name: inspectionId
        in: path
        description: Inspection ID
        required: true
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/inspection_share_request_model'
      responses:
        '201':
          description: Returns the created file request ID.
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: integer
                    description: HTTP status code
                    example: 201
                  data:
                    $ref: '#/components/schemas/file_request_response_model'
        '400':
          description: "Bad request — returned when:\n- `send_to` is missing, empty, or contains an invalid email address\n- The inspection at `{inspectionId}` cannot be resolved or the caller\n  lacks access to it (surfaced as `document_id has an invalid value`,\n  not a 404)\n"
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: integer
                    description: HTTP status code
                    example: 400
                  error:
                    type: string
                    example: document_id has an invalid value
        '401':
          $ref: '#/components/responses/401'
  /v1/inspections/{inspectionId}/sign:
    post:
      x-internal: true
      summary: Sign an inspection
      tags:
      - Inspections
      description: 'Attaches a performer signature to the inspection. The `signature_path` is the storage key of an

        image previously uploaded to the RentCheck image bucket. Used by the mobile inspection flow.

        '
      parameters:
      - name: inspectionId
        in: path
        description: Inspection ID
        required: true
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/inspection_sign_request_model'
      responses:
        '200':
          description: Returns the inspection updated with the signature.
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: integer
                    description: HTTP status code
                    example: 200
                  data:
                    $ref: '#/components/schemas/inspection_v1_response_model'
        '400':
          description: 'Bad request — request body validation failed. `signature_path` is required, and

            `note`, when supplied, must be a string.

            '
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: integer
                    description: HTTP status code
                    example: 400
                  error:
                    type: string
                    example: '"signature_path" is required'
        '401':
          $ref: '#/components/responses/401'
        '404':
          description: Not Found — `inspection not found` (the underlying access check fails for a missing inspection or user).
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: integer
                    description: HTTP status code
                    example: 404
                  error:
                    type: string
                    example: inspection not found
        '500':
          description: 'Internal server error — surfaces when the inspection signing guard

            rejects the sign attempt; the guard''s reason string is returned as a

            500 instead of a 403.

            '
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: integer
                    description: HTTP status code
                    example: 500
                  error:
                    type: string
  /v1/inspections/{inspectionId}/start:
    post:
      x-internal: true
      summary: Start an inspection
      tags:
      - Inspections
      description: 'Marks an inspection as started by the authenticated user. Used by the mobile performer flow. The

        response body is the inspection as returned by `GET /v1/inspections/{inspectionId}`.

        '
      parameters:
      - name: inspectionId
        in: path
        description: Inspection ID
        required: true
        schema:
          type: string
      requestBody:
        required: true
        description: 'The body is required by request validation but takes no fields today —

          send an empty JSON object `{}`.

          '
        content:
          application/json:
            schema:
              type: object
      responses:
        '200':
          description: Returns the updated inspection.
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: integer
                    description: HTTP status code
                    example: 200
                  data:
                    $ref: '#/components/schemas/inspection_v1_response_model'
        '400':
          description: 'Bad request — the request body must be a JSON object; non-object bodies (string, array,

            primitive) are rejected by request validation.

            '
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: integer
                    description: HTTP status code
                    example: 400
                  error:
                    type: string
                    example: '"data" must be an object'
        '401':
          $ref: '#/components/responses/401'
        '404':
          description: Not Found — `inspection not found` or `user not found` (the underlying access check fails).
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: integer
                    description: HTTP status code
                    example: 404
                  error:
                    type: string
                    example: inspection not found
  /v1/inspections/{inspectionId}/submit:
    post:
      x-internal: true
      summary: Submit an inspection
      tags:
      - Inspections
      description: 'Submits a performed inspection for review. Moves the inspection out of `In Progress` and

        notifies reviewers. Used by the mobile performer flow after features have been filled in.

        '
      parameters:
      - name: inspectionId
        in: path
        description: Inspection ID
        required: true
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/inspection_submit_request_model'
      responses:
        '200':
          description: Returns the updated inspection.
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: integer
                    description: HTTP status code
                    example: 200
                  data:
                    $ref: '#/components/schemas/inspection_v1_response_model'
        '400':
          description: 'Bad request — request body validation failed. `note`, when supplied, must be a

            string; a non-object body is rejected.

            '
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: integer
                    description: HTTP status code
                    example: 400
                  error:
                    type: string
                    example: '"note" must be a string'
        '401':
          $ref: '#/components/responses/401'
        '403':
          description: Forbidden — the caller doesn't have permission to submit this inspection.
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: integer
                    description: HTTP status code
                    example: 403
                  error:
                    type: string
        '404':
          description: 'Not Found — `user not found` or `inspection not found`. The

            access guard returns `user not found` when the caller''s profile cannot

            be loaded and `inspection not found` when the inspection does not exist

            or the caller cannot read it. `inspection not found` can also be

            returned post-update if the update does not persist.

            '
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: integer
                    description: HTTP status code
                    example: 404
                  error:
                    type: string
                    enum:
                    - user not found
                    - inspection not found
                    example: inspection not found
  /v1/inspections/{inspectionId}/approve:
    post:
      summary: Approve inspection
      tags:
      - Inspections
      description: 'Approve an inspection with the given ID. Approval requires a signature, provided either as text

        (`signature_text`) or as a base64-encoded image (`signature_image_data`). An optional numeric

        `rating`, free-form `note`, and `user_facing_note` (displayed to the performer) can also be

        supplied.

        '
      parameters:
      - name: inspectionId
        in: path
        description: Inspection ID
        required: true
        schema:
          type: string
          minLength: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/inspection_approve_request_model'
      responses:
        '200':
          description: Returns the approved inspection
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: integer
                    description: HTTP status code
                    example: 200
                  data:
                    $ref: '#/components/schemas/inspection_v1_response_model'
        '400':
          description: 'Bad request — request body validation failed. Typical messages mention an

            xor conflict between `data.signature_text` and `data.signature_image_data` (exactly one

            must be supplied), or a malformed `data.rating` / `data.note` / `data.user_facing_note`.

            '
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: integer
                    description: HTTP status code
                    example: 400
                  error:
                    type: string
        '401':
          $ref: '#/components/responses/401'
        '403':
          description: 'Forbidden — the caller can''t approve this inspection. The `error` message states why: the inspection is not in an approvable state (e.g. already approved), the caller lacks permission, or a required first-step review hasn''t been completed.

            '
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: integer
                    description: HTTP status code
                    example: 403
                  error:
                    type: string
                    example: You don't have permission to approve this inspection.
        '404':
          description: 'Not Found — `inspection not found`, `user not found`,

            `performer not found`, or

            `signature text or image data not found`. The underlying access

            check maps missing-user lookups

# --- truncated at 32 KB (198 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/rentcheck/refs/heads/main/openapi/rentcheck-inspections-api-openapi.yml