Back to top

API Documentation

Forms

Overview

Real Estate Agents and brokerages have tons of paperwork. However, most of these papers must be filled in PDF forms.

PDF forms are have a very poor experience and unusable on phones. Also, they are dumb and a lot of redundant data has to be filled in them throughout a deal.

Therefore, Rechat offers a form feature which is the core of our transaction platform.

The basic idea behind the feature is as follows:

  1. We will create an HTML form for any of the PDF Documents that brokers have to use

  2. We will map the HTML form to the PDF Document

  3. Users will fill the HTML form. We, using the mapped data, will generate PDF’s for them

In order to be able to create HTML forms easily, we use a form builder tool called FormStack. However, FormStack is abstracted away from clients and is considered as an implementation detail.

Form

A Form is an entity that represents one of the forms that brokers can fill.

It has two public properties:

  1. name (String) Name of the form. Like A Buyer's termination of a contract
  2. roles (Array) List of the roles that can participate (sign) in completion of this form. (Will elaborate on this on Envelopes section)

::: notice A form object has also the connection to the relevant Formstack form and the mapping data. However, that’s irrelevant to clients. :::

Forms are not created or updated by users. Users can only get a copy of this form, which we call a submission.

Basically, a Form is the original copy which is only created and maintained by Rechat.

The only endpoint clients have to use is to get the list of forms. The rest of the API endpoints documented here are used by our internal mapper tool.

Get all available forms

Get all available forms
GET/brands/:brand/forms

Example URI

GET /brands/:brand/forms
URI Parameters
HideShow
brand
string (required) Example: 4731e78a-4249-47ca-b98d-46fb8ff0f09f
Response  200
HideShow
Body
{
  "code": "OK",
  "data": [
    {
      "id": "15ab2928-f572-466e-9463-348cef6ee1b8",
      "created_at": 1760470041.356783,
      "updated_at": 1760470041.375987,
      "deleted_at": null,
      "name": "Updated form name",
      "brand": null,
      "tab_name": null,
      "acl": null,
      "type": "form",
      "url": "undefined/15ab2928-f572-466e-9463-348cef6ee1b8.pdf"
    }
  ],
  "info": {
    "count": 1,
    "total": 0
  }
}

Create a new form

Create a new form
POST/forms

Example URI

POST /forms
Request
HideShow
Body
{
  "name": "Addendum for Back-Up Contract"
}
Response  200
HideShow
Body
{
  "code": "OK",
  "data": {
    "id": "15ab2928-f572-466e-9463-348cef6ee1b8",
    "created_at": 1760470041.356783,
    "updated_at": 1760470041.356783,
    "deleted_at": null,
    "name": "Addendum for Back-Up Contract",
    "brand": null,
    "tab_name": null,
    "acl": null,
    "type": "form",
    "url": "undefined/15ab2928-f572-466e-9463-348cef6ee1b8.pdf"
  }
}

Get a form

Get a form
GET/forms/:id

Example URI

GET /forms/:id
URI Parameters
HideShow
id
string (required) Example: 15ab2928-f572-466e-9463-348cef6ee1b8
Response  200
HideShow
Body
{
  "code": "OK",
  "data": {
    "id": "15ab2928-f572-466e-9463-348cef6ee1b8",
    "created_at": 1760470041.356783,
    "updated_at": 1760470041.375987,
    "deleted_at": null,
    "name": "Updated form name",
    "brand": null,
    "tab_name": null,
    "acl": null,
    "type": "form",
    "url": "undefined/15ab2928-f572-466e-9463-348cef6ee1b8.pdf"
  }
}

Update a form

Update a form
PUT/forms/:id

Example URI

PUT /forms/:id
URI Parameters
HideShow
brand
string (required) Example: 4731e78a-4249-47ca-b98d-46fb8ff0f09f
Response  200
HideShow
Body
{
  "code": "OK",
  "data": [
    {
      "id": "15ab2928-f572-466e-9463-348cef6ee1b8",
      "created_at": 1760470041.356783,
      "updated_at": 1760470041.375987,
      "deleted_at": null,
      "name": "Updated form name",
      "brand": null,
      "tab_name": null,
      "acl": null,
      "type": "form",
      "url": "undefined/15ab2928-f572-466e-9463-348cef6ee1b8.pdf"
    }
  ],
  "info": {
    "count": 1,
    "total": 0
  }
}

Submission

Overview

When a user gets a new copy of one of the Forms, we call that copy a Submission.

Therefore, if there are 15 legal documents supported in Rechat, that means we will have 15 forms.

However, anytime a user uses one of these forms, we will create a new copy for him, which we internally call a submission.

A submission include information such as:

  • state of the submission. (Could be either Draft or Fair)

  • author who amended it the last time

  • title of the submission (which is a copy of the title of its original form)

  • revision_count The number of revisions we have for this submission which is number of edits + 1 (As the first time its created its also a revision)

  • file which is an object that holds information about the PDF file generated for the latest revision of this submission

We keep track of all the changes a user makes to a single submission. Therefore, if the user edits his submission 10 times, we will save and keep all 11 different revisions of that submission.

Generated by aglio on 14 Oct 2025