Jet.Build Full API Reference

Base URL: https://api.jet.build

Updated: July 5th, 2023

The Jet.Build API

The Jet.Build API is organized around REST. Our API accepts form-encoded request bodies, returns JSON-encoded responses, and uses standard HTTP response codes.

To use the API, you will need your user token. This token can be found in your profile page from within the Jet.Build Cloud, or you can use the Basic Authentication API to retrieve your user token. Do not share this token with anyone. If your personal token has been compromised, you may change it from your profile page.

For question on how to use the API, please contact your Jet.Build representative.
For technical support, please email support@jet.build.

Base URL: https://api.jet.build

Happy coding! :)


Authentication

The endpoint provided for Basic Authentication should only be used to retrieve a user's token and projects. For all other requests, the header "Authorization: Token (( YOUR_USER_TOKEN ))" should be used.


Endpoints

POST /login

Form Data

  email="you@company.abc"
  password="your_jet_build_password"

Response

{
 "token": "05319c69f162150d622ccf76af677257d71",
 "org_projects": [
  {
   "pk": 10,
   "project_name": "Jet.Build HQ",
  },
  ...
 ],
 "ext_projects": [
  {
   "pk": 18,
   "project_name": "External Jet.Build HQ",
  },
  ...
 ]
}


Projects

This section provides the Project object and endpoint to retrieve the project information. Currently, the API only has the ability to return project information. The data returned is used to perform many other requests, like adding drawings, responding to RFIs, and more.


Objects

The Project Object

{
 "pk": 10,
 "project_name": "Jet.Build HQ",
 "project_id": "dc005005fcf24a2cb239d899e6407740",
 "organization_id": 108,
 "object_details": {
  "license": "ACTIVE" / "FREE",
  "address": "50 Lexington Avenue, New York, NY, 10010, USA",
  "size": "400,000 SF",
  "value": "150,000,000",
  "num_of_units": "400",
  "country_data": {
   "pk": 2,
   "country": "United States",
   "iso2": "US",
   "currency": "USD",
   "currency_icon": "usd"
  },
  "city_data": {
   "pk": 2520,
   "city": "New York City",
   "accuweather_key": 2627449,
   "timezone": America/New_York
  },
  "project_users": {
   "org_people": [ (( Organizational User Object(s) )) ],
   "ext_people": [ (( External User Object(s) )) ]
  },
  "settings": {
   "pk": 180,
   "use_metric": true/false,
   "ext_restrict_view": true/false,
   "ext_restrict_create": true/false
  }
 }
}


Endpoints

GET /projects/details/:pk

pk is the Primary Key of the project. You can retrieve this by using the Basic Authentication endpoint.

Response

{
 "access_type": "admin" / "external",
 "project_data": (( Project Object )),
 "user_apps": {
  "Daily Reports": true/false,
  "Drawings": true/false,
  "Files": true/false,
  "Punch Lists": true/false,
  ... ,
 }
}


Users

Currently, there are no endpoints for the User object. This section provides the Organizational User Object and the External User Object.


Objects

The Organizational User Object

{
 "pk": "user@company.abc",
 "email": "user@company.abc",
 "user_details": {
  "full_name": "User Full Name",
  "display_name": "User Full Name (user@company.abc)",
  "contact_number": "844 489 9273",
  "user_id": "ef005005fcf24a2cb239d899e6407718",
  "title": "Owner",
  "is_active": true/false,
  "preferences": (( User Preference Object ))
 }
}

The External User Object

{
 "pk": "user@company.abc",
 "person_name": "User Full Name",
 "number": "844 489 9273",
 "profession": "Architect",
 "company": "Great Architects Co.",

 // module level permissions
 "ext_admin": true/false,
 "budgets": true/false,
 "change_orders": true/false,
 "drawings": true/false,
 ... ,
 "schedules": true/false,
 "specifications": true/false,

 "user_details": {
  "pk": "user@company.abc",
  "email": "user@company.abc",
  "display_name": "User Full Name (user@company.abc)",
  "user_id": "xm005005fcf24a2cb239d899e6407719",
  "is_active": true/false,
  "preferences": (( User Preference Object ))
 }
}


User Preferences

This sections provide the User Preference Object. This object is always returned with the Organizational User Object and the External User Object.


Objects

The User Preference Object

{
 "new_invoice_email": true/false,
 "ap_response_emails": true/false,
 "budget_response_email": true/false,
 "calendar_email": true/false,
 "new_co_email": true/false,
 "respond_co_email": true/false
 "daily_reports_email": true/false
 "drawing_email": true/false
 "new_thread_email": true/false
 "respond_thread_email": true/false
 "new_inspection_email": true/false
 "inspection_due_email": true/false
 "inspection_closed_email": true/false
 "respond_inspection_email": true/false
 "respond_insurance_email": true/false
 "insurance_expiring_email": true/false
 "insurance_expired_email": true/false
 "meetings_email": true/false
 "new_ncr_email": true/false
 "respond_ncr_email": true/false
 "close_ncr_email": true/false
 "due_ncr_email": true/false
 "permit_expiring_email": true/false
 "permit_response_email": true/false
 "new_punch_email": true/false
 "close_punch_email": true/false
 "due_punch_email": true/false
 "punch_response_email": true/false
 "qa_qc_response_email": true/false
 "req_email": true/false
 "new_rfi_email": true/false
 "respond_rfi_email": true/false
 "close_rfi_email": true/false
 "due_rfi_email": true/false
 "bic_rfi_email": true/false
 "schedule_response_email": true/false
 "spec_response_email": true/false
 "new_submittal_email": true/false
 "respond_submittal_email": true/false
 "close_submittal_email": true/false
 "due_submittal_email": true/false
 "bic_submittal_email": true/false
 "new_task_email": true/false
 "respond_task_email": true/false
 "due_task_email": true/false
 "session_expire": 604800
 "default_page": "user_open_items"
}

The options for "default_page" are:
 - user_open_items (default)
 - calendarView
 - myProjects
 - userNotifications


Workflows

Throughout the modules and API references of Jet.Build, you will come across the Workflow Object. This object is typical and is used in popular modules like RFIs, Submittals, Punch Lists, and much more.


Objects

The User Workflow Object

{
 "wf1": {
  "emails": "contact@jet.build,support@jet.build",
  "complete": true/false
 },
 "wf2": {
  "emails": "notifications@jet.build",
  "complete": true/false
 },
 "wf3": {
  "emails": "",
  "complete": true/false
 },
 "wf4": {
  "emails": "",
  "complete": true/false
 },
 "wf5": {
  "emails": "",
  "complete": true/false
 }
}


Daily Reports

This section provides objects and endpoints that can be used to list, add, edit, and delete daily reports. A daily report has two objects: one that can be quickly displayed for a list, and one that can return the report and all of its content (e.g., workforce, photos, etc.).

Additionally, there are objects for report photos, workforce, inspections, equipment, deliveries, other, safety, and weather. Each object is listed below.

Jump to endpoints 


Objects

The Daily Report List Object

{
 "pk": 118,
 "report_id": "xlo005005fcf24a2cb239d899e6407728",
 "is_final": true/false,
 "finalized_by": "User Full Name (user@company.abc)",
 "finalized_on": "Tue Nov 01, 2022",
 "object_details": {
  "date": {
   "date": "2022-11-01",
   "display": "Nov 01, 2022"
  }
 }
}

The Daily Report Detail Object

{
 "pk": 118,
 "report_id": "xlo005005fcf24a2cb239d899e6407728",
 "is_final": true/false,
 "finalized_by": "User Full Name (user@company.abc)",
 "finalized_on": "Tue Nov 01, 2022",
 "object_details": {
  "date": {
   "date": "2022-11-01",
   "display": "Nov 01, 2022"
  },
  "photos": [ (( Report Photos Object(s) )) ],
  "manpower": [ (( Report Workforce Object(s) )) ],
  "inspections": [ (( Report Inspections Object(s) )) ],
  "equipment": [ (( Report Equipment Object(s) )) ],
  "deliveries": [ (( Report Deliveries Object(s) )) ],
  "other": [ (( Report Other Object(s) )) ],
  "safety": [ (( Report Safety Object(s) )) ],
  "weather": [ (( Report Weather Object(s) )) ]
 }
}

The Report Photo Object

{
 "pk": 110,
 "location": "SE Corner, 3rd floor",
 "notes": "Rebar ready to pour concrete",
 "object_details": {
  "file_path": "https://s3-jet-build.s3.us-east-2.amazonaws.com/media/path/to/filename.jpg",
  "filename": "filename.jpg",
  "time": {
   "time": "12:52:00.000000",
   "display": "12:52 PM"
  }
 }
}

The Report Workforce Object

{
 "pk": 113,
 "company_name": "Concrete Inc.",
 "workers": 4,
 "hours": 8,
 "man_hours": 35,
 "ot_hours": 0.5,
 "ot_rate": 1.5,
 "object_details": {
  "working_hours": {
   "normal": 32,
   "overtime": 3,
   "total": 35
  }
 }
}

The Report Inspection Object

{
 "pk": 101,
 "inspection": "Rebar Inspection",
 "inspection_by": "Inspector Gadget",
 "notes": "Passed; refer to inspection module for report",
 "object_details": {
  "time": {
   "time": "12:52:00.000000",
   "display": "12:52 PM"
  }
 }
}

The Report Equipment Object

{
 "pk": 202,
 "equipment_name": "Magni",
 "operating_hours": 3,
 "notes": "Used for unloading rebar delivery",
 "object_details": {
  "time": {
   "time": "07:52:00.000000",
   "display": "07:52 AM"
  }
 }
}

The Report Delivery Object

{
 "pk": 54,
 "delivery_from": "Concrete Inc.",
 "contents": "Rebar for 4th floor",
 "object_details": {
  "time": {
   "time": "07:52:00.000000",
   "display": "07:52 AM"
  }
 }
}

The Report Other Object

{
 "pk": 8,
 "title": "Something random happened",
 "notes": "It wasn't really important"
}

The Report Safety Object

{
 "pk": 116,
 "title": "Pedestrian fell on sidewalk",
 "notes": "No injuries. Pedestrian is OK.",
 "logged_by": "user@company.abc",
 "object_details": {
  "time": {
   "time": "08:44:00.000000",
   "display": "08:44 AM"
  }
 }
}

The Report Weather Object

{
 "pk": 254,
 "unit": "F",
 "wind_unit": "mi/h",
 "precip_unit": "in",
 "morning": 61,
 "morning_time": 07:58 AM,
 "morning_icon": 07,
 "morning_wind": 3.3,
 "morning_precip": 0,
 "noon": 65,
 "noon_time": 12:58 PM,
 "noon_icon": 06,
 "noon_wind": 4,
 "noon_precip": 0.02,
 "evening": 75,
 "evening_time": 05:58 PM,
 "evening_icon": 02,
 "evening_wind": 4.5,
 "evening_precip": 0.04,
}


Endpoints

GET /reports

Headers
  Authorization: Token (( YOUR_USER_TOKEN | string ))

Query Parameters
  project_data = (( Project Object ))

Response

[ (( Daily Report List Object(s) )) ]

POST /reports

Headers
  Authorization: Token (( YOUR_USER_TOKEN | string ))

Form Data
  project_data = (( Project Object ))
  report_date = (( REPORT_DATE | string | format: mm/dd/yyyy ))

Response

(( Daily Report List Object )) (for the report added)

GET /reports/details/:report_object["pk"]

report_pk is the primary key for the report to be detailed.

Headers
  Authorization: Token (( YOUR_USER_TOKEN | string ))

Response

(( Daily Report Detail Object ))

DELETE /reports/workforce

Headers
  Authorization: Token (( YOUR_USER_TOKEN | string ))

Form Data
  wf_pk = (( WORKFORCE_PK | int | workforce_object["pk"] ))

Response

null

POST /reports/workforce

Headers
  Authorization: Token (( YOUR_USER_TOKEN | string ))

Form Data
  report_pk = (( REPORT_PK | int | report_list_object["pk"] ))
  workers = (( NUM_OF_WORKERS | int ))
  hours = (( NUM_OF_HOURS | float ))
  ot_hours = (( NUM_OF_OT_HOURS | float ))
  ot_rate = (( OT_RATE | float ))
  company_name = (( COMPANY_NAME | string ))
  notes = (( NOTES | text_field ))

PUT /reports/workforce

Headers
  Authorization: Token (( YOUR_USER_TOKEN | string ))

Form Data
  mp_object_pk = (( WORKFORCE_PK | int | workforce_object["pk"] ))
  workers = (( NUM_OF_WORKERS | int ))
  hours = (( NUM_OF_HOURS | float ))
  ot_hours = (( NUM_OF_OT_HOURS | float ))
  ot_rate = (( OT_RATE | float ))
  company_name = (( COMPANY_NAME | string ))
  notes = (( NOTES | text_field ))

POST /reports/photos

Headers
  Authorization: Token (( YOUR_USER_TOKEN | string ))

Form Data
  project_data = (( Project Object ))
  report_pk = (( int | report_object["pk"] ))
  photo_time = (( PHOTO_TIME | string | format: hh/mm AMPM ))
  location = (( PHOTO_LOCATION | string ))
  notes = (( PHOTO_NOTES | string ))

Form File
  filename = [ (( list of request.FILES )) ]


Drawings

The Drawing API is a powerful tool and free tool that allows you to manage your drawings and files from outside of Jet.Build. Because the drawing module is free (yes, free), you can access these endpoints without an active project license.

Utilizing the endpoints provided by the Jet.Build Drawings API allows you to create webhooks for events like uploading files directly to Jet.Build upon saving files to an external Dropbox account, creating secure FTP sites on private VPNs, customize mention events in drawings, and more!

Jump to endpoints 


Objects

The Drawing Object

{
 "pk": 545,
 "drawing": "Architectural",
 "drawing_id": "ymo005005fcf24a2cb239d899e6407942",
 "description": "A0.00 to A7.15",
 "tags": "",
 "object_details": {
  "num_of_issues": 4,
  "latest_issue": "Issued for Construction (Jun 13, 2023)",
  "drawing_size": "1.2GB"
 }
}

The Issue Object

{
 "pk": 728,
 "issue": "Issued for Construction",
 "issue_id": "nab005005fcf24a2cb239d899e6407886",
 "description": "Architectural set issued for construction",
 "tags": "",
 "in_working_set": true/false,
 "object_details": {
  "drawing": {,
   "drawing": "Architectural",
   "drawing_id": "ymo005005fcf24a2cb239d899e6407942"
  },
  "files": [ (( Issue File Object(s) )) ],
  "issue_size": "56.3MB",
  "issued": {
   "date": "2023-06-13",
   "display": "Jun 13, 2023",
  }
 }
}

The Issue File Object

{
 "pk": 1028,
 "added_on_local": "Tue Jun 13, 2023 at 02:18 PM",
 "last_saved_local": "Tue Jun 13, 2023 at 02:18 PM",
 "description": "",
 "object_details": {
  "file_path": "https://s3-jet-build.s3.us-east-2.amazonaws.com/media/path/to/arch-dwg.pdf",
  "file_path": "arch-dwg.pdf",
  "is_pdf": true/false,
  "size": "18.4MB"
 }
}


Endpoints

GET /drawings

Headers
  Authorization: Token (( YOUR_USER_TOKEN | string ))

Query Parameters
  project_data = (( Project Object ))

Response

{
 "drawings": [ (( Drawing Object(s) )) ],
 "storage": true/false
}

"storage" returns a boolean, true or false, whether the account exceeds its total storage amount. If false, the account does not have enough storage to add more files in the drawing module.

(Note: the "storage" does not reflect other modules other than the "Files" module. Storage consumption in other modules, e.g., photos in Daily Reports, do not contribute to the account's storage consumption.)

POST /drawings

Headers
  Authorization: Token (( YOUR_USER_TOKEN | string ))

Form Data
  project_data = (( Project Object ))
  title = (( DRAWING_TITLE | string ))
  description = (( DRAWING_DESCRIPTION | test_field ))


Files

Like the Drawing API, the File API is a powerful and free tool that allows you to manage your files and live-link-files from outside of Jet.Build. Because the file module is free (yes, free), you can access these endpoints without an active project license.

The endpoints available to you via the files API gives you the ability to create folders and add files and links to files you store outside of Jet.Build (e.g., a link to an Excel file in your company's Sharepoint). PDFs and Office file type (e.g., .docx and .xlsx) also have the capability to edit and markup in-app, without ever leaving Jet.Build.

Jump to endpoints 


Objects

The Folder Object

{
 "pk": 849,
 "folder_name": "Receipts",
 "is_public": true/false,
 "folder_id": "gno037005fcf24a2cb239d899e6409240",
 "object_details": {
  "parent_folder": (( Folder Object )),
  "folder_path": [ (( Folder Object(s) )) ],
  "file_upload_path": "path/to/upload/files"
 }
}

The File Object

{
 "pk": 2541,
 "uploaded_on_local": "Wed Jul 5, 2023 at 01:48 PM",
 "object_details": {
  "file_path": "path/to/file/inv072023.pdf",
  "file_name": "inv072023.pdf",
  "is_office": true/false,
  "size": "2.4MB"
 }
}

{
 "pk": 484,
 "link_name": "Accounts Payable Excel File",
 "link_url": "https://link.to.file",
 "uploaded_on_local": "Wed Jul 5, 2023 at 01:52 PM"
 }
}


Endpoints

GET /files/folders/:folder_object["pk"]

Headers
  Authorization: Token (( YOUR_USER_TOKEN | string ))

Query Parameters
  project_data = (( Project Object ))

Notes
  * send 0 as the value for :folder_object["pk"] to get top-level folders

POST /files/folders/:folder_object["pk"]

Headers
  Authorization: Token (( YOUR_USER_TOKEN | string ))

Form Data
  project_data = (( Project Object ))
  folder_name = (( string ))
  is_public = (( empty string | do not send if not public ))


Punch Lists

The Punch List API is an easy way to add, update, and extract Punch List information from Jet.Build. In addition to the manipulation of your project Punch Lists, the Punch List API provides an endpoint to add photos to punch list items. This capability allows you to take photos on-site and offline, and bulk-upload later.

The endpoints available to you via the files API gives you the ability to create and update punch lists and punch list items. Additional endpoints for listing punch lists and punch list items are available, as well as the previously mentioned endpoint for single and bulk photo uploads.

Jump to endpoints 


Objects

The Punch List Object

{
 "pk": 242,
 "punch_list": "Unit 2B Kitchen",
 "list_id": "gno037005fcf24a2cb239d899e6409240",
 "is_complete": true/false,
 "about": "Punch list for the kitchen in unit 2B.",
 "tags": "",
 "linked_sheet_id": int or null,
 "recipients": "contact@jet.build,support@jet.build",
 "recipients_groups": "110,118,142",
 "object_details": {
  "due_by": {
   "date": "2023-07-06",
   "display": "Jul 06, 2023"
  },
  "status": "{OPEN} | {OVERDUE} | {COMPLETE}"
 }
}

The Punch List Item Object

{
 "pk": 318,
 "item": "Loose faucet.",
 "is_complete": true/false,
 "about": "The faucet is loose and needs caulking around the area.",
 "object_details": {
  "due_by": {
   "date": "2023-07-06",
   "display": "Jul 06, 2023"
  },
  "photos": [ (( Punch List Photo Object(s) )) ],
  "status": "{OPEN} | {OVERDUE} | {COMPLETE}",
  "ball_in_court": "support@jet.build",
  "workflow": (( Workflow Object ))
 }
}

The Punch List Photo Object

{
 "pk": 598,
 "about": "Photo showing missing caulking at faucet.",
 "object_details": {
  "file_path": "https://s3-jet-build.s3.us-east-2.amazonaws.com/media/path/to/filename.jpg",
  "filename": "filename.jpg"
 }
}


Endpoints

GET /punch-lists

Headers
  Authorization: Token (( YOUR_USER_TOKEN | string ))

Query Parameters
  project_data = (( Project Object ))

POST /punch-lists

Headers
  Authorization: Token (( YOUR_USER_TOKEN | string ))

Form Data
  project_data = (( Project Object ))
  punch_list = (( PUNCH_LIST_TITLE | string ))
  about = (( PUNCH_LIST_ABOUT | string ))
  due_by = (( ISSUE_DATE | string | format: mm/dd/yyyy ))