RentCheck Inspections API
The Inspections API from RentCheck — 26 operation(s) for inspections.
The Inspections API from RentCheck — 26 operation(s) for inspections.
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