RentCheck Subscriptions API

The Subscriptions API from RentCheck — 6 operation(s) for subscriptions.

OpenAPI Specification

rentcheck-subscriptions-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: RentCheck REST Account Settings Subscriptions 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: Subscriptions
paths:
  /v1/subscriptions/trial:
    post:
      x-internal: true
      summary: Create a free trial subscription
      tags:
      - Subscriptions
      description: 'Starts a free trial subscription for the caller. Reads the `x-app-id` header to determine which

        Chargebee site / app the trial should be created in.

        '
      parameters:
      - in: header
        name: x-app-id
        required: true
        schema:
          type: string
        description: 'App id identifying which Chargebee site the trial should be created in.

          '
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/subscription_create_trial_request_model'
      responses:
        '200':
          description: Returns the newly-created trial subscription.
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: integer
                    description: HTTP status code
                    example: 200
                  data:
                    $ref: '#/components/schemas/subscription_get_by_user_response_model'
        '400':
          description: 'Bad request — request body validation rejected the body. The

            `x-app-id` header is also required, so a missing header surfaces

            here rather than as a 401.

            '
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: integer
                    description: HTTP status code
                    example: 400
                  error:
                    type: string
                    example: '"data.user_name" is required'
        '401':
          $ref: '#/components/responses/401'
        '404':
          description: 'Not Found — the authenticated token''s user id does not

            resolve to a profile.

            '
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: integer
                    description: HTTP status code
                    example: 404
                  error:
                    type: string
                    enum:
                    - user not found
                    example: user not found
  /v1/subscriptions/me:
    get:
      x-internal: true
      summary: Get subscription
      tags:
      - Subscriptions
      description: 'Returns the subscription associated with the authenticated user. Used by the web and mobile apps

        to render plan / billing information for the logged-in user.

        '
      responses:
        '200':
          description: Returns the user's subscription.
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: integer
                    description: HTTP status code
                    example: 200
                  data:
                    $ref: '#/components/schemas/subscription_get_by_user_response_model'
        '401':
          $ref: '#/components/responses/401'
        '404':
          description: 'Not Found — the authenticated user has no subscription record.

            No `user not found` 404 is raised on this path (a

            missing profile flows through as an empty subscription lookup).

            '
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: integer
                    description: HTTP status code
                    example: 404
                  error:
                    type: string
                    enum:
                    - subscription not found
                    example: subscription not found
  /v1/subscriptions/invoices/{invoiceId}/get-download-url:
    get:
      x-internal: true
      summary: Get a download URL for an invoice
      tags:
      - Subscriptions
      description: 'Returns a short-lived URL that can be used to download the PDF for the supplied Chargebee invoice.

        The invoice must belong to the caller''s subscription.

        '
      parameters:
      - name: invoiceId
        in: path
        description: Chargebee invoice id.
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Returns the download URL for the invoice PDF.
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: integer
                    description: HTTP status code
                    example: 200
                  data:
                    type: string
                    description: Pre-signed download URL for the invoice PDF.
        '401':
          $ref: '#/components/responses/401'
        '404':
          description: Not Found — `subscription not found` or `invoice 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
                    - invoice not found
                    example: invoice not found
  /v1/subscriptions/invoices:
    get:
      x-internal: true
      summary: Get invoices for the caller's subscription
      tags:
      - Subscriptions
      description: 'Lists Chargebee invoices associated with the caller''s subscription. Returns the curated subset of

        Chargebee invoice fields surfaced by the web app; refer to Chargebee''s API docs for the full set.

        '
      responses:
        '200':
          description: Returns the list of invoices for the caller's subscription.
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: integer
                    description: HTTP status code
                    example: 200
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/subscription_invoice_response_model'
                  count:
                    type: integer
                    description: Amount of elements in `data`.
        '401':
          $ref: '#/components/responses/401'
        '404':
          description: Not Found — `subscription not found` for the caller.
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: integer
                    description: HTTP status code
                    example: 404
                  error:
                    type: string
                    example: subscription not found
  /v1/subscriptions/me/requests:
    post:
      x-internal: true
      summary: Request a new plan / trial for the caller's subscription
      tags:
      - Subscriptions
      description: 'Submits an internal request for sales / support to switch the caller''s subscription to the

        supplied Chargebee plan. Optional `note` is forwarded to the team that fulfills the request.

        '
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/subscription_create_request_request_model'
      responses:
        '200':
          description: The request has been submitted.
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: integer
                    description: HTTP status code
                    example: 200
                  data:
                    type: 'null'
                    description: 'Always `null` — the response returns no data on success.

                      '
        '400':
          description: Bad request — request body validation rejected the body.
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: integer
                    description: HTTP status code
                    example: 400
                  error:
                    type: string
                    example: '"data.plan_id" is required'
        '401':
          description: "Unauthorized — a standard auth-token failure, or the caller's\nsubscription state disallows the request (`unauthorized` message) when:\n- the caller already has permission to edit the plan directly, or\n- the caller requested the plan they are already on and the\n  subscription is active or in trial.\n"
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: integer
                    description: HTTP status code
                    example: 401
                  error:
                    type: string
                    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
                    - unauthorized
                    example: unauthorized
        '404':
          description: "Not Found — one of the resources needed to fulfil the request could\nnot be located:\n- `subscription not found` — the caller has no subscription attached.\n- `plan not found` — the supplied `plan_id` does not resolve in Chargebee.\n- `permission group not found` — no permission group on the subscription\n  grants `allow_billing_plan_editing`, so there is no billing admin to notify.\n- `admin users not found` — the billing admin permission group exists\n  but has no members.\n"
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: integer
                    description: HTTP status code
                    example: 404
                  error:
                    type: string
                    enum:
                    - subscription not found
                    - plan not found
                    - permission group not found
                    - admin users not found
                    example: subscription not found
  /v1/subscriptions:
    put:
      x-internal: true
      summary: Update the caller's subscription
      tags:
      - Subscriptions
      description: 'Updates the Chargebee plan and/or addons on the caller''s subscription. Supply only the keys you

        want to change; both `plan` and `addons` are optional. Returns the updated subscription.

        '
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/subscription_update_request_model'
      responses:
        '200':
          description: Returns the updated subscription.
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: integer
                    description: HTTP status code
                    example: 200
                  data:
                    $ref: '#/components/schemas/subscription_get_by_user_response_model'
        '400':
          description: Bad request — Chargebee rejected the update (invalid plan id, addon id, etc.).
          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 — `subscription not found` for the caller.
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: integer
                    description: HTTP status code
                    example: 404
                  error:
                    type: string
                    example: subscription not found
components:
  schemas:
    subscription_create_request_request_model:
      x-internal: true
      type: object
      required:
      - plan_id
      description: Used to request a trial extension or plan change.
      properties:
        plan_id:
          type: string
          description: Chargebee plan id the user is requesting.
        note:
          type: string
    subscription_get_by_user_response_model:
      type: object
      required:
      - id
      - status
      - created_at
      - teams
      - plan
      - addons
      - rentcheck_contact
      - coupons
      properties:
        id:
          type: string
          description: Entity ID
          example: 00BRcZPSakXz6w7RYoE
        status:
          type: string
          description: Current status of subscription
          enum:
          - active
          - future
          - in_trial
          - non_renewing
          - paused
          - cancelled
        created_at:
          type: string
          description: Entity creation date, in ISO format
          example: 2022-12-02 14:15:37.925000
        cancelled_at:
          type: string
          description: Subscription cancellation date, in ISO format
          example: 2022-12-02 14:15:37.925000
        next_billing_at:
          type: string
          description: Next billing date for the subscription, in ISO format.
          example: 2022-12-02 14:15:37.925000
        teams:
          type: array
          items:
            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
              logo:
                type: string
                description: The location of a hosted image file that is used to co-brand RentCheck reports and email communication.
        plan:
          type: object
          required:
          - sub_id
          - plan_id
          - plan_name
          - customer_id
          - billing_email
          - plan_unit_price
          - plan_amount
          - plan_qty
          - pricing_model
          - active_units
          properties:
            sub_id:
              type: string
            plan_id:
              type: string
            plan_name:
              type: string
            invoice_name:
              type: string
              description: Optional label used on invoices for this plan.
            customer_id:
              type: string
            billing_email:
              type: string
            plan_unit_price:
              type: number
            plan_amount:
              type: number
            plan_qty:
              type: number
            pricing_model:
              type: string
              enum:
              - flat_fee
              - per_unit
              - tiered
              - volume
              - stairstep
            active_units:
              type: number
              description: Number of billable units currently active on this plan.
        addons:
          type: array
          items:
            type: object
            required:
            - id
            - name
            - amount
            - quantity
            - unit_price
            - pricing_model
            properties:
              id:
                type: string
              name:
                type: string
              amount:
                type: number
              quantity:
                type: number
              unit_price:
                type: number
              pricing_model:
                type: string
                enum:
                - flat_fee
                - per_unit
                - tiered
                - volume
                - stairstep
        payment_method:
          type: object
          description: Optional payment method associated with the subscription. The full Chargebee payload (id, updated_at, type, reference_id, status, plus optional `card` / `bank_account` blocks) is passed through as-is.
          additionalProperties: true
        plan_trial:
          type: object
          description: Details of the most recent plan trial, when the subscription has an active or completed plan-trial.
          required:
          - plan_id
          - duration_in_days
          properties:
            plan_id:
              type: string
            duration_in_days:
              type: number
            start:
              type: string
              description: Trial start date, in ISO format.
              example: 2022-12-02 14:15:37.925000
            end:
              type: string
              description: Trial end date, in ISO format.
              example: 2022-12-02 14:15:37.925000
        plan_free_trials:
          type: array
          description: List of plan free trials the caller has already participated in — used server-side to avoid re-offering the same trial. An omitted value is normalised to `[]`, so the field is always present on the wire.
          items:
            type: object
            required:
            - id
            properties:
              id:
                type: string
        addon_free_trials:
          type: array
          items:
            type: object
            required:
            - status
            - trial_start
            - trial_end
            - paid_addon_id
            properties:
              status:
                type: string
                enum:
                - active
                - expired
              trial_start:
                type: string
              trial_end:
                type: string
              paid_addon_id:
                type: string
        rentcheck_contact:
          type: object
          required:
          - id
          - name
          - email
          - company
          - company_id
          properties:
            id:
              type: string
            name:
              type: string
            email:
              type: string
            company:
              type: string
            company_id:
              type: string
        coupons:
          type: array
          items:
            type: object
            required:
            - id
            - name
            - discount_type
            properties:
              id:
                type: string
              name:
                type: string
              discount_type:
                type: string
                enum:
                - fixed_amount
                - percentage
              discount_amount:
                type: number
              discount_percentage:
                type: number
    subscription_update_request_model:
      x-internal: true
      type: object
      description: At least one of `plan` or `addons` should be supplied.
      properties:
        plan:
          type: object
          required:
          - id
          properties:
            id:
              type: string
              description: Chargebee plan id to switch to.
        addons:
          type: array
          items:
            type: object
            required:
            - id
            properties:
              id:
                type: string
                description: Chargebee addon id.
    subscription_create_trial_request_model:
      x-internal: true
      type: object
      required:
      - user_name
      - company
      - portfolio_size
      description: Request body for creating a subscription trial.
      properties:
        user_name:
          type: string
        company:
          type: string
        portfolio_size:
          type: integer
    subscription_invoice_response_model:
      x-internal: true
      type: object
      required:
      - id
      - date
      - status
      - amount_due
      description: Subset of the Chargebee invoice payload surfaced to clients.
      properties:
        id:
          type: string
          description: Chargebee invoice id.
        date:
          type: integer
          description: Unix-second timestamp the invoice was issued.
        status:
          type: string
          enum:
          - paid
          - posted
          - payment_due
          - not_paid
          - voided
          - pending
        amount_due:
          type: integer
          description: Amount due on the invoice (in the smallest currency unit).
  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