shell

Introduction

Welcome to the documentation for BlueSuit's ExtractAPI! BlueSuit extracts data from documents and returns them back to you via our API. You can view code examples that use curl to the right.

You Should Know

Our API is asynchronous.

Our API is rate limited.

Your API key must be included in all API requests sent to the server.

Get Started

  1. Get your API key from your BlueSuit dashboard.

  2. Submit your document to its specific endpoint. For example - you will send your Rent Roll document to a specific Rent Roll endpoint.

  3. When you send a document, you will be given a requestId (a UUIDv4) to reference.

  4. Due to our asynchronous process, the response will take a few minutes before it's ready to retrieve. While you are waiting, you will be able to check on the status of our extraction process while it is in process.

  5. Once your data is ready, the status endpoint will return a redirect to the response endpoint when you check it, & you will be able to grab the response data.

Authentication

BlueSuit uses API keys to allow access to our API, and to send and receive information. You will get an API key in your BlueSuit dashboard, in the API Keys section.

BlueSuit requires your API key to be included in all API requests sent to the server, in an x-api-key header that looks like this:

"x-api-key: PutYourSpecialAPIKeyHereIfYouWantThisToWork"

Rate Limiting

User-to-server requests are rate limited at 100 requests per second and per API key, with a limit of 1,000 open requests per API key allowed at any time.

A total of 10,000 requests per API key are allowed per calendar month. To increase this limit, please contact us.

Send Document

Our endpoints send a document to BlueSuit for a specific sort of processing. We have unique routes for each document type we process, and unique routes for each processing type you can request.

The endpoints accept HTTP POST requests containing document data in binary format. Content-Type and x-api-key headers must be present on your request.

Once your document has been submitted, these endpoints will return an HTTP 202 response containing a requestId you can use to check the status of your request. A link to the status endpoint will also be provided in the Location header of the HTTP 202.

You will send your document to an endpoint for processing. There are several route options for the type of processing you need, and the type of document you are sending. You will also have the ability to add query string parameters for your request to tag your request, and/or send the results to (an) email address(es).

HTTP Request

curl -X POST
  -H "Content-Type: application/pdf"
  -H "x-api-key: PutYourSpecialAPIKeyHereIfYouWantThisToWork"
  --data-binary "@/your/file/location/filename.pdf" "https://extract.bluesuit.com/v1/document_type/processing_type"

POST https://extract.bluesuit.com/v1/document_type/processing_type

If you are including a processing_type in your request, make sure it is in the HTTP request. It is required for the following document_type routes:

  1. rent_roll
  2. closing_disclosure
  3. property_deed
  4. offering_memo

Please refer to the Complete list of Endpoints below for more details.

Query string parameters

curl -X POST
  -H "Content-Type: application/pdf"
  -H "x-api-key: PutYourSpecialAPIKeyHereIfYouWantThisToWork"
  --data-binary "@/your/file/location/filename.pdf" "https://extract.bluesuit.com/v1/closing_disclosure/quick?email=address@domain.com&tag=any-desired-tag"

Email Addresses

With any request, people can now add ?email=address@domain.com onto the end of their HTTP request. When the request completes successfully (or errors out), any email addresses included will receive an email with the status update for the document extraction. Success emails have response data attached as JSON and/or CSV files.

Multiple emails can be configured as well, as long as they are comma-separated - as an example, ?email=address1@domain.com,address2@domain.com will result in an email being sent to both address1@domain.com and address2@domain.com.

Tag

Additionally, with any request, you may add ?tag=any-desired-tag onto the end of their HTTP request. This will associate the request with a tag in our system. When used in conjunction with a valid value for the email query string parameter, the tag data will show up in the file names of the attached results.

Email and tag query string parameters can be combined in a request, using standard ampersand query string concatenation. Order does not matter.

POST https://extract.bluesuit.com/v1/closing_disclosure/quick?email=address1@domain.com,address2@domain.com,address3@domain.com&tag=any-desired-tag

Expected File Name

When results are returned via email, the attached file name will follow a specific pattern.

Tag_BlueSuit_DocumentType_YourRequestID.file extension

If there is no tag, the file name will start with "BlueSuit".

Document Routes

You will send your document to the route that corrollates with what sort of document it is.

Route Description
closing_disclosure Closing Disclosure documents
property_deed Property Deed documents
rent_roll Rent Roll documents
psa/foundational Purchase and Sale Agreement documents (data returned as entities)
offering_memo Offering Memo documents

Processing Routes

Documents have the option to be processed with an accuracy guarantee, or with a focus on speed. There are different costs associated with either processing type.

Route Description
accurate Data returned will have an accuracy guarantee; processing time may be longer.
quick Data is returned with a focus on speed with an accuracy score of pass or fail.

Complete list of Endpoints

This is the complete list of current endpoints. Depending on the processing_type route, response time may vary significantly.

Endpoint Description
rent_roll/accurate Rent Roll documents, processing time may be extended to ensure accuracy
rent_roll/quick Rent Roll documents
offering_memo/quick Offering Memo documents
closing_disclosure/quick Closing Disclosure documents
property_deed/quick Property Deed documents
psa/foundational Purchase and Sale Agreement documents (data returned as entities)

Check Status

Once your document is submitted, you will use your requestId to check on your status and get your results.

This is accomplished by hitting the status endpoint with your requestId passed as a query string parameter.

While your document is pending, this endpoint will return an HTTP 202 response confirming that the document has been accepted for processing. Once your document has finished processing, this endpoint will return an HTTP 302 that redirects to the response endpoint via the Location header.

HTTP Request

curl -H "x-api-key: PutYourSpecialAPIKeyHereIfYouWantThisToWork"
  "https://extract.bluesuit.com/v1/status?requestId=your-requestId-here"

GET https://extract.bluesuit.com/v1/status?requestId=your-requestId-here

The command will return this message while your document is processing:


{
  "message": "Accepted",
  "requestId": "your-requestId-here"
}

Once your document has finished processing, you will see this message when you check the status:

{
  "message": "Found",
  "requestId": "your-requestId-here"
}

HTTP Status Codes

Status Code Description Meaning
202 Accepted Your document is being processed.
302 Found The response is ready.
400 Error Bad Request - Request may contain invalid email address(es). Please check your email address(es) and resubmit.
404 Error Not Found
422 Error There was an extraction error.
429 Warning Too many requests. You may have exceeded the Rate Limit - please wait a few minutes and try again.
500 Error Internal Server Error

Retrieve Response

Once your document has finished processing, you will use your requestId to retrieve the response.

The JSON structure of the response payload will vary based on the endpoint the document was initially submitted to.

HTTP Request for Response

curl -H "x-api-key: PutYourSpecialAPIKeyHereIfYouWantThisToWork"
  "https://extract.bluesuit.com/v1/response?requestId=your-requestId-here"  

If you added an email address to your send request, the email addresses will automatically receive the results with any relevant attachments.

Otherwise, you can use the URL below to request the results once your extraction is complete.

GET https://extract.bluesuit.com/v1/response?requestId=your-requestId-here

Download Response

HTTP Request for Download

GET https://extract.bluesuit.com/v1/response/file?fileType=your-format-here&requestId=your-request-id-here

The file response will return HTTP 302 response, and a location header of an S3 URL that contains your file. To utilize the download response, whatever tool you are using to make the request needs to be configured to follow redirects.

If you are using curl, add -L to your request.

Query strings for different file types

curl -L -H "x-api-key: PutYourSpecialAPIKeyHere" "https://extract.bluesuit.com/v1/response/file?fileType=your-format-here&requestId=your-request-id-here"
Format Description Document Types
json Returns a JSON result as application/json All
csv Returns a CSV result as text/csv rent_roll

Responses by Document

AccuracyIQ

This is what a typical response for AccuracyIQ will look like.

    {
    "accuracyiq": 'pass',
    }

AccuracyIQ is returned as either pass or fail within the JSON response.

Closing Disclosure

Closing disclosure data groups are returned as a JSON object. You will see an overview section with select pieces data, as well as raw data section that contains the full, unfiltered data extraction.

This is what a typical response for Closing Disclosures, Overview will look like.

{
"overview":     
    "date_issued":  "12-14-2020",
    "closing_date": "12-15-2020",
    "disbursement_date":    "12-15-2020",
    "settlement_agent": "Josh Allen LLC"
    "file_num": "503784-32473",
    "property_street_address":  "1 Bills Drive"
    "property_city":    "Orchard Park"
    "property_state":   "New York"
    "property_zipcode": "14127"
    "property_value":   100000000,
    "borrower_name":    "D'artagnan Trimarche"
    "borrower_street_address":  "43-16 Main Street STE 1452"
    "borrower_city":    "Buffalo"
    "borrower_state":   "New York"
    "borrower_zipcode": "14222"
    "lender_name":  "K & T Reguli LLC NFM"
    "lender_street_address":   "",
    "lender_city":  "",
    "lender_state": "",
    "lender_zipcode":   "",
    "loan_term":    24,
    "purpose":  "Refinance",
    "product":  "",
    "loan_type": "conventional",
    "loan_id":  "7-7-7-7"
    "mic_num":  text
    "loan_amount":  90000000,
    "interest_rate":    2.97,
    "monthly_principal_and_interest":   1234,
    "closing_costs":    600000,
    "cash_to_close":    1000000,
}     

This is what a typical response for Closing Disclosures, Raw Data will look like.

{
  "message": "OK",
  "requestId": "your-requestId-here",
  "response": {
    "loan_costs": {
      "total_loan_costs": {
        "items": [
          {
            "item": "Loan Costs Subtotals (A + B + C)",
            "borrower_paid": {
              "at_closing": 1000.00,
              "before_closing": 1000.00
            }
          }
        ],
        "borrower_paid": 1000.00
      },
      "origination_charges": {
        "items": [
          {
            "item": "% of Loan Amount (Points)"
          },
          {
            "item": "Application Fee to BlueSuit Bank",
            "borrower_paid": {
              "before_closing": 1000.00
            }
          },
          {
            "item": "Loan Origination Fee to BlueSuit Bank",
            "borrower_paid": {
              "at_closing": 1000.00
            }
          }
        ],
        "borrower_paid": 1000.00
      },
      "services_borrower_did_shop_for": {
        "items": [
          {
            "item": "See Additional C.01 Items",
            "paid_by_others": 1000.00
          },
          {
            "item": "Title - E-Recording Fee to BlueSuit Title",
            "borrower_paid": {
              "at_closing": 1000.00
            }
          },
        ],
        "borrower_paid": 1000.00
      },
      "services_borrower_did_not_shop_for": {
        "items": [
          {
            "item": "Credit Report Fee to BlueSuit Data",
            "paid_by_others": 1000.00
          },
        ],
        "borrower_paid": 1000.00
      }
    },
    "loan_terms": {
      "loan_amount": {
        "value": 1000.00,
        "amount_can_increase": "NO"
      },
      "interest_rate": {
        "value": 2.5,
        "amount_can_increase": "NO"
      },
      "balloon_payment": {
        "loan_has_feature": "NO"
      },
      "prepayment_penalty": {
        "loan_has_feature": "NO"
      },
      "monthly_principal_and_interest": {
        "value": 1000.00,
        "amount_can_increase": "NO"
      }
    },
    "other_costs": {
      "other": {
        "items": [],
        "borrower_paid": 1000.00
      },
      "prepaids": {
        "items": [
          {
            "item": "Mortgage Insurance Premium ( mo.)"
          },
          {
            "item": "Prepaid Interest ($1000.00 per day from 01/01/2021 to 12/31/2021)",
            "borrower_paid": {
              "at_closing": 1000.00
            }
          },
        ],
        "borrower_paid": 1000.00
      },
      "total_other_costs": {
        "items": [
          {
            "item": "Other Costs Subtotals (E + F + G + H)",
            "borrower_paid": {
              "at_closing": 1000.00
            }
          }
        ],
        "borrower_paid": 1000.00
      },
      "total_closing_costs": {
        "items": [
          {
            "item": "Closing Costs Subtotals (D + I)",
            "borrower_paid": {
              "at_closing": 1000.00,
              "before_closing": 1000.00
            },
            "paid_by_others": 1000.00
          },
          {
            "item": "Lender Credits"
          }
        ],
        "borrower_paid": 1000.00
      },
      "taxes_and_other_government_fees": {
        "items": [
          {
            "item": "Recording Fees Deed: Mortgage: $1000.00",
            "borrower_paid": {
              "at_closing": 1000.00
            }
          }
        ],
        "borrower_paid": 1000.00
      },
      "initial_escrow_payment_at_closing": {
        "items": [
          {
            "item": "Homeowner's Insurance $1000.00 per month for 12 mo.",
            "borrower_paid": {
              "at_closing": 1000.00
            }
          },
          {
            "item": "Mortgage Insurance"
          },
          {
            "item": "Property Taxes See additional G.03 items",
            "borrower_paid": {
              "at_closing": 1000.00
            }
          },
          {
            "item": "Aggregate Adjustment"
          }
        ],
        "borrower_paid": 1000.00
      }
    },
    "costs_at_closing": {
      "cash_to_close": {
        "value": 1000.00,
        "includes_closing_costs": {
          "to_borrower": false,
          "from_borrower": true
        }
      },
      "closing_costs": {
        "total": 1000.00,
        "sub_costs": [
          {
            "item": "Loan Costs",
            "value": 1000.00
          },
          {
            "item": "Other Costs",
            "value": 1000.00
          }
        ]
      }
    },
    "loan_disclosures": {
      "assumption": [
        {
          "item": "If you sell or transfer this property to another person, your lender will allow, under certain conditions, this person to assume this loan on the original terms.",
          "value": false
        },
        {
          "item": "If you sell or transfer this property to another person, your lender will not allow assumption of this loan on the original terms.",
          "value": true
        }
      ],
      "late_payment": {
        "late_fee": "",
        "days_late": ""
      },
      "escrow_account": {
        "details": {
          "table": {
            "initial_escrow_payment": 1000.00,
            "monthly_escrow_payment": 1000.00,
            "escrowed_property_costs_over_year_1": 1000.00,
            "non_escrowed_property_costs_over_year_1": 1000.00
          },
          "reason_no_escrow": ""
        },
        "escrow_exists": true
      },
      "demand_features": [
        {
          "item": "Your loan has a demand feature, which permits your lender to require early repayment of the loan. You should review your note for details.",
          "value": false
        },
        {
          "item": "Your loan does not have a demand feature.",
          "value": true
        }
      ],
      "partial_payments": [
        {
          "item": "Your lender may accept payments that are less than the full amount due (partial payments) and apply them to your loan.",
          "value": false
        },
        {
          "item": "Your lender may hold them in a separate account until you pay the rest of the payment, and then apply the full payment to your loan.",
          "value": false
        },
        {
          "item": "Your lender does not accept any partial payments.",
          "value": false
        }
      ],
      "negative_amortization": [
        {
          "item": "Under your loan terms, you are scheduled to make monthly payments that do not pay all of the interest due that month. As a result, your loan amount will increase (negatively amortize), and, your loan amount will likely become larger than your original loan amount. Increases in your amount lower the equity you have in this property.",
          "value": false
        },
        {
          "item": "Under your loan terms, you may have monthly payments that do not pay all of the interest due that month. If you do, your loan amount will increase (negatively amortize), and, as a result, your loan amount may become larger than your original loan amount. Increases in your loan amount lower the equity you have in this property.",
          "value": false
        },
        {
          "item": "Under your loan terms, you do not have a negative amortization feature.",
          "value": true
        }
      ]
    },
    "loan_information": {
      "mic_num": "",
      "product": "",
      "purpose": "Refinance",
      "loan_term": 1000.00,
      "loan_type": {
        "va": false,
        "fha": false,
        "other": false,
        "other_type": "",
        "conventional": true
      },
      "loan_id_num": "8675309"
    },
    "loan_calculations": {
      "finance_charge": 0,
      "amount_financed": 0,
      "total_of_payments": 0,
      "annual_percentage_rage": 0,
      "total_interest_percentage": 0
    },
    "other_disclosures": {
      "liability_after_forclosure": {
        "state_law_protection": false,
        "state_law_no_protection": true
      }
    },
    "projected_payments": {
      "payment_calculation": {
        "estimated_escrow": 1000.00,
        "mortgage_insurance": 0,
        "principal_and_interest": 1000.00,
        "estimated_total_monthly_payment": 1000.00
      },
      "estimated_taxes_insurance_and_assessments": {
        "value": 1000.00,
        "estimate_includes": {
          "property_taxes": {
            "included": true,
            "in_escrow": "YES"
          },
          "homeowners_insurance": {
            "included": true,
            "in_escrow": "YES"
          }
        }
      }
    },
    "closing_information": {
      "file_num": "8675309",
      "property": "1644 Platte St\nDenver, CO 80202",
      "date_issued": "01/01/2021",
      "closing_date": "01/01/2021",
      "settlement_agent": "BlueSuit Title",
      "disbursement_date": "01/01/2021",
      "estimated_prop_value": 1000.00
    },
    "contact_information": {
      "lender": {
        "name": "BlueSuit Bank",
        "email": "hello@bluesuit.com",
        "phone": "",
        "address": "1644 Platte St\nDenver, CO 80202",
        "contact": "Jeff Harrison",
        "nmls_id": "",
        "in_license_id": "000000",
        "contact_nmls_id": "",
        "contact_in_license_id": "000000"
      },
      "mortgage_broker": {
        "name": "",
        "email": "",
        "phone": "",
        "address": "",
        "contact": "",
        "nmls_id": "",
        "in_license_id": "",
        "contact_nmls_id": "",
        "contact_in_license_id": ""
      },
      "settlement_agent": {
        "name": "BlueSuit Title",
        "email": "",
        "phone": "",
        "address": "1644 Platte St\nDenver, CO 80202",
        "contact": "",
        "nmls_id": "",
        "in_license_id": "000000",
        "contact_nmls_id": "",
        "contact_in_license_id": "000000"
      }
    },
    "payoffs_and_payments": {
      "items": [
        {
          "to": "Payoff First Mortgage to BlueSuit Bank",
          "amount": 1000.00
        }
      ],
      "total_payoffs_and_payments": 1000.00
    },
    "transaction_information": {
      "lender": "BlueSuit Bank",
      "borrower": "Jeff Harrison\n123 Fake Dr\nDenver, CO 80202"
    },
    "calculating_cash_to_close": {
      "items": [
        {
          "item": "Loan Amount",
          "final": 1000.00,
          "changed": "YES",
          "loan_estimate": 1000.00
        },
        {
          "item": "Total Closing Costs (J)",
          "final": -1000.00,
          "changed": "YES",
          "loan_estimate": 1000.00
        },
        {
          "item": "Closing Costs Paid Before Closing",
          "final": 1000.00,
          "changed": "YES",
          "loan_estimate": 1000.00
        },
        {
          "item": "Total Payoffs and Payments (K)",
          "final": -1000.00,
          "changed": "YES",
          "loan_estimate": 1000.00
        }
      ],
      "cash_to_close": {
        "final": {
          "value": 1000.00,
          "to_borrower": false,
          "from_borrower": true
        },
        "changed": "Closing Costs Financed (Paid from your Loan Amount) $1000.00",
        "loan_estimate": {
          "value": 1000.00,
          "to_borrower": false,
          "from_borrower": true
        }
      }
    },
    "closing_disclosure_attachment": {
      "lender": "BlueSuit Bank",
      "payoffs": [
        {
          "payee": "The BANK",
          "description": "Payoff First Mortgage",
          "loan_payoff": 1000.00,
          "total_payoff": 1000.00,
          "paid_by_others": 0,
          "additional_interest": {
            "interest": -1000.00,
            "per_diem": 1000.00,
            "from_date": "01/01/2021",
            "through_date": "12/31/2021"
          },
          "borrower_paid_at_closing": 1000.00,
          "borrower_paid_before_closing": 0
        }
      ],
      "borrower": "Jeff Harrison\n123 Fake Dr\nDenver, CO 80202",
      "closing_date": "January 1, 2021",
      "settlement_agent": "BlueSuit Title\n4 Fake Street\nDenver, CO 80202\n(555)555-5555",
      "disbursement_date": "January 1, 2021",
      "property_location": "123 Fake Dr\nDenver, CO 80202"
    }
  },
  "errorMessage": null
}

Offering Memo

Offering Memo data groups are returned as a JSON object. Metadata for each field includes the page number of where the data was found.

This is what a typical response for Offering Memos will look like.

"message": "OK",
  "requestId": "your-requestId-here",
  "response": 
        {
        "metadata":
        {
            "property":
            {
                "priceSF":
                {
                    "page": 3
                },
                "priceUnit":
                {
                    "page": 3
                },
                "unitCount":
                {
                    "page": 1
                },
                "yearBuilt":
                {
                    "page": 2
                },
                "askingPrice":
                {
                    "page": 2
                },
                "brokerEmail":
                {
                    "page": 1
                },
                "propertyCity":
                {
                    "page": 1
                },
                "propertyType":
                {
                    "page": null
                },
                "askingCapRate":
                {
                    "page": 2
                },
                "propertyState":
                {
                    "page": 1
                },
                "squareFootage":
                {
                    "page": 2
                },
                "propertyZipcode":
                {
                    "page": 1
                },
                "propertyStreetAddress":
                {
                    "page": 1
                }
            },
            "financial":
            {
                "totalExpenses":
                {
                    "page": 3
                },
                "netOperatingIncome":
                {
                    "page": 2
                },
                "effectiveGrossRevenue":
                {
                    "page": 3
                }
            },
            "accuracyIQ": "pass"
        },
    "property": {
        "priceSF": 153.21,
        "priceUnit": 073183,
        "unitCount": 41,
        "yearBuilt": 1983,
        "accuracyIQ": "pass",
        "askingPrice": 500000,
        "brokerEmail": "thisisnt@arealemail.com",
        "propertyCity": "Buffalo",
        "propertyType": "multifamily",
        "askingCapRate": 0.0765,
        "propertyState": "NY",
        "squareFootage": 3295,
        "propertyZipcode": "14075",
        "propertyStreetAddress": "1 Bills Drive"
    },
    "financial": {
        "accuracyIQ": "pass",
        "totalExpenses": 39846,
        "netOperatingIncome": 4872378,
        "effectiveGrossRevenue": 234255
    }
}

Property Deed

Property Deed data groups are returned as a JSON object.

This is what a typical response for Property Deeds will look like.

{
  "message": "OK",
  "requestId": "your-requestId-here",
  "response": {
    "bp": ["2412", "1504"],
    "instrument": "101070856",
    "executed_date":"2017-06-05",
    "recorded_date": "2017-06-05",
    "grantor": "Breaux Alexander Murphy",
    "grantee": "Breaux Alexander Murphy, Trustee of the Breaux Alexander Murphy Trust dated June 5, 2017",
    "consideration": 10,
    "legal_description": "UNIT 1B, BUILDING II, SILVER TOWN CONDOMINIUMS, A UTAH\nCONDOMINIUM PROJECT, TOGETHER WITH ITS APPURTENANT\nUNDIVIDED OWNERSHIP INTEREST IN THE COMMON AREAS TO THE\nABOVE MENTIONED UNIT OF SAID SILVER TOWN CONDOMINIUUMS,\nWHICH INTEREST IS ESTABLISHED AND IDENTIFIED IN THE\nCONDOMINIUM DECLARATION, RECORDED AS ENTRY NO. 137917\nAND SURVEY MAP FILED FOR RECORD AS ENTRY NO. 13267 AND AS\nMAY BE AMENDED BY THE FIRST SUPPLEMENTAL RECORD OF\nSURVEY RECORDED AS ENTRY NO. 289073.",
    "document_type": "GRANT DEED",
    "accept": true
  },
  "errorMessage": null
}

Purchase and Sale Agreement

Purchase and Sale Agreement entities are returned as a JSON object.

This is what a typical response for Purchase and Sale Agreements will look like.

{
  "message": "OK",
  "requestId": "your-requestId-here",
  "response": {
    "entities": [
      {
        "text": "Wei Dai",
        "type": "PERSON",
        "words": [
          {
            "line_id": "cc1b9b54-4f93-4fbb-8a8a-008ca21798e3",
            "word_text": "Wei",
            "page_number": 1,
            "bounding_box": {
              "top": 0.07234074175357819,
              "left": 0.35113614797592163,
              "width": 0.11444901674985886,
              "height": 0.02534463070333004
            },
            "ocr_confidence": 0.9958470153808594
          },
          {
            "line_id": "e82fc871-ceeb-40ea-8814-bf2a6131298e",
            "word_text": "Dai",
            "page_number": 1,
            "bounding_box": {
              "top": 0.07218379527330399,
              "left": 0.5029894709587097,
              "width": 0.14778336882591248,
              "height": 0.03146405518054962
            },
            "ocr_confidence": 0.997081527709961
          }
        ],
        "span_end": 16,
        "span_start": 0,
        "ai_confidence": 0.8763666152954102
      },
      {
        "text": "Snow",
        "type": "ORGANIZATION",
        "words": [
          {
            "line_id": "996f388d-60d7-423d-bc04-39087cdb5e3f",
            "word_text": "Snow",
            "page_number": 1,
            "bounding_box": {
              "top": 0.1112598404288292,
              "left": 0.3497231602668762,
              "width": 0.0423760712146759,
              "height": 0.016683269292116165
            },
            "ocr_confidence": 0.9993796539306641
          }
        ],
        "span_end": 21,
        "span_start": 17,
        "ai_confidence": 0.49930137395858765
      },
      etc.
    ],
    "raw_text": "Lorem ipsum dolor sit amet...",
    "num_pages": 17,
    "request_id": "your-requestId-here"
  },
  "errorMessage": null
}

Rent Roll

Rent Roll data groups are returned as a JSON object, and, if your subscription includes it, may return a .csv file as well.

This is what a typical response for Rent Rolls will look like.

{
  multifamily: {
    accuracyIQ: "pass",
    rows: 
        {
            rowIdentifier: "row0",
            unitNumber: "731",
            unitType: null,
            sqft: 1241,
            bedCount: 2,
            bathCount: 2,
            marketRent: null,
            realRent: 2150,
            moveInDate: "2015-12-20"
            vacant: "",
        },
           ...
    raw: {
        accuracyIQ: "pass",
        rows: 
            {
                rowIdentifier: "row0",
                BD/BA: "2 / 2",
                Notes: "Refurbed 2017",
                _sqft: 1241,
                _vacant: "",
                Base Rent: "$2150",
                _unit_num: "731",
                _bed_count: 2,
                _real_rent: 2150,
                Square Feet: "1241",
                Tenant Name: "Helen Oyeyemi",
                _bath_count: 2,
                _move_in_date: "2015-12-20",
                Lease End Date: "Dec. 20, 2022",
                Property Address Unit: "11103",
                City/State/Zip Lease Start Date: "Dec. 20, 2015"
            },
        }
           ...
}

Errors and Warnings

The BlueSuit API uses the following error codes (also described above):

HTTP Status Code Description
400 Bad Request - Request may contain invalid email address(es). Please check your email address(es) and resubmit.
404 Not Found
422 Error - There was an extraction error.
429 Warning - Too many requests. You may have exceeded the Rate Limit - please wait a few minutes and try again.
500 Internal Server Error

Changelog

May 19, 2021

New

Added a new document route to the API for Offering Memos.

April 30, 2021

New

Rent roll extracted results may now be downloaded in diffeent formats with the addition of query string parameters.

New

Rent roll results now include a _vacant variable in the results.

April 27, 2021

New

Rent roll extracted results may now be tagged and sent to an email address with the addition of query string parameters.

April 16, 2021

Breaking

New header-authetication requirements for sending requests to the server. This change requires you to use x-api-key instead of Authentication: Bearer in the header.

New

Implemented rate limiting on user-to-server requests. Previously there was no limit.

New

Added additional document endpoints - more document types, and the ability to send documents for quick processing, and accuracy-focused processing.