Projects
Query Projects
Section titled “Query Projects”Returns a list of projects in your organization. Projects are returned in sorted order, with the most recently created project appearing first.
GET https://api.arcsite.com/v1/projects
curl "https://api.arcsite.com/v1/projects" \ -H "Authorization: Bearer your_api_token_here"const response = await fetch("https://api.arcsite.com/v1/projects", { headers: { Authorization: "Bearer your_api_token_here", },});const data = await response.json();import requests
response = requests.get( "https://api.arcsite.com/v1/projects", headers={"Authorization": "Bearer your_api_token_here"},)data = response.json()[ { "id": 36029621652695040, "name": "project 4", "created_at": "2022-01-16T04:19:23", "updated_at": "2022-01-16T04:19:23", "job_number": "144111",26 collapsed lines
"customer": { "name": "Jack", "phone": "1441", "second_phone": "1122", "email": "c@arcsite.com", "second_email": "s@arcsite.com", "address": { "street": "street", "city": "city", "county": "county", "state": "state", "zip_code": "300433" } }, "work_site_address": { "street": "street", "city": "city", "county": "county", "state": "state", "zip_code": "300433" }, "sales_rep": { "name": "Wang", "email": "h@arcsite.com", "phone": "122122-121" }, "tags": ["tag1", "tag2"], "archived": false }]Query Parameters
Section titled “Query Parameters”| Parameter | Default | In | Description |
|---|---|---|---|
| page | 1 | query | Request a specific page |
| per_page | 10 | query | Page size |
| created_at_begin | None | query | (optional) Filter by project creation start date in UTC ISO 8601 format (e.g., 2025-01-16T04:19:23) |
| created_at_end | None | query | (optional) Filter by project creation end date in UTC ISO 8601 format (e.g., 2025-01-16T04:19:23) |
Create Project
Section titled “Create Project”Creates a new project.
POST https://api.arcsite.com/v1/projects
curl -X POST 'https://api.arcsite.com/v1/projects' \ -H 'Authorization: Bearer your_api_token_here' \ -H 'Content-Type: application/json' \ -d '{ "name": "hahaa", "job_number": "144111", "customer": { "name": "Jack", "phone": "1441", "second_phone": "1122", "email": "c@arcsite.com", "second_email": "s@arcsite.com", "address": { "street": "street", "city": "city", "county": "county", "state": "state", "zip_code": "300433" } }, "work_site_address": { "street": "street", "city": "city", "county": "county", "state": "state", "zip_code": "300433" }, "sales_rep": { "name": "Wang", "email": "h@arcsite.com", "phone": "122122-121" }, "tags": ["tag1", "tag2"] }'const response = await fetch("https://api.arcsite.com/v1/projects", { method: "POST", headers: { Authorization: "Bearer your_api_token_here", "Content-Type": "application/json", }, body: JSON.stringify({ name: "hahaa", job_number: "144111", customer: { name: "Jack", phone: "1441", second_phone: "1122", email: "c@arcsite.com", second_email: "s@arcsite.com", address: { street: "street", city: "city", county: "county", state: "state", zip_code: "300433", }, }, work_site_address: { street: "street", city: "city", county: "county", state: "state", zip_code: "300433", }, sales_rep: { name: "Wang", email: "h@arcsite.com", phone: "122122-121", }, tags: ["tag1", "tag2"], }),});const data = await response.json();import requests
response = requests.post( "https://api.arcsite.com/v1/projects", headers={"Authorization": "Bearer your_api_token_here"}, json={ "name": "hahaa", "job_number": "144111", "customer": { "name": "Jack", "phone": "1441", "second_phone": "1122", "email": "c@arcsite.com", "second_email": "s@arcsite.com", "address": { "street": "street", "city": "city", "county": "county", "state": "state", "zip_code": "300433", }, }, "work_site_address": { "street": "street", "city": "city", "county": "county", "state": "state", "zip_code": "300433", }, "sales_rep": { "name": "Wang", "email": "h@arcsite.com", "phone": "122122-121", }, "tags": ["tag1", "tag2"], },)data = response.json(){ "id": "36029621653386360", "name": "nac", "created_at": "2022-01-16T03:31:39", "updated_at": "2022-01-16T03:31:39", "job_number": "heeloo", "customer": { "name": "hello", "phone": "122112", "second_phone": "122112", "email": "dev@arctuition.com", "second_email": "dev@arctuition.com", "address": { "street": "address", "city": "city", "county": "county", "state": "state", "zip_code": "200544" } }, "work_site_address": { "street": "street", "city": "city", "county": "county", "state": "state", "zip_code": "300433" }, "sales_rep": { "name": "Wang", "email": "dev@arctuition.com", "phone": "122112" }, "tags": ["tag1", "tag2"], "archived": false}Parameters
Section titled “Parameters”| Parameter | Type | Description |
|---|---|---|
| name | String | (required) Name of the project |
| owner | String | (required) Owner of the project |
| customer | Customer | (optional) Customer profile of the project |
| job_number | String | (optional) Job number of the project |
| work_site_address | Address | (optional) Worksite address of the project |
| sales_rep | SalesRep | (optional) Sales Representative of the project |
| tags | List[String] | (optional) Tags added to this project |
Project Integrations
Section titled “Project Integrations”ArcSite supports integration with various external platforms. Once project creation is complete, you can use the standard integration solutions we provide for different platforms to integrate your project. After integration is completed, your project will gain additional functionality to support data synchronization and interactions with third-party platforms. For specific details, see the integrations module.
Project Name Rules
Section titled “Project Name Rules”- Project name must be unique across the same organization.
- Project name cannot contain any of the following characters:
:/\. - Project name cannot start with
.. - Project name must be less than or equal to 200 characters.
Customer
Section titled “Customer”| Parameter | Type | Description |
|---|---|---|
| name | String | (optional) Customer name |
| phone | String | (optional) Customer phone |
| second_phone | String | (optional) Customer secondary phone |
| String | (optional) Customer email | |
| second_email | String | (optional) Customer secondary email |
| address | Address | (optional) Customer address |
Address
Section titled “Address”| Parameter | Type | Description |
|---|---|---|
| street | String | (optional) Street name |
| city | String | (optional) City name |
| county | String | (optional) County name |
| state | String | (optional) State name |
| zip_code | String | (optional) Zip code |
SalesRep
Section titled “SalesRep”| Parameter | Type | Description |
|---|---|---|
| name | String | (optional) Customer name |
| String | (optional) Customer email | |
| phone | String | (optional) Customer phone |
Update Project
Section titled “Update Project”Updates an existing project.
PATCH https://api.arcsite.com/v1/projects/<id>
curl -X PATCH 'https://api.arcsite.com/v1/projects/<ID>' \ -H 'Authorization: Bearer your_api_token_here' \ -H 'Content-Type: application/json' \ -d '{ "name": "hahaa", "job_number": "144111", "customer": { "name": "Jack", "phone": "1441", "second_phone": "1122", "email": "c@arcsite.com", "second_email": "s@arcsite.com", "address": { "street": "street", "city": "city", "county": "county", "state": "state", "zip_code": "300433" } }, "work_site_address": { "street": "street", "city": "city", "county": "county", "state": "state", "zip_code": "300433" }, "sales_rep": { "name": "Wang", "email": "h@arcsite.com", "phone": "122122-121" }, "tags": ["tag1", "tag2"] }'const response = await fetch("https://api.arcsite.com/v1/projects/<ID>", { method: "PATCH", headers: { Authorization: "Bearer your_api_token_here", "Content-Type": "application/json", }, body: JSON.stringify({ name: "hahaa", job_number: "144111", customer: { name: "Jack", phone: "1441", second_phone: "1122", email: "c@arcsite.com", second_email: "s@arcsite.com", address: { street: "street", city: "city", county: "county", state: "state", zip_code: "300433", }, }, work_site_address: { street: "street", city: "city", county: "county", state: "state", zip_code: "300433", }, sales_rep: { name: "Wang", email: "h@arcsite.com", phone: "122122-121", }, tags: ["tag1", "tag2"], }),});const data = await response.json();import requests
response = requests.patch( "https://api.arcsite.com/v1/projects/<ID>", headers={"Authorization": "Bearer your_api_token_here"}, json={ "name": "hahaa", "job_number": "144111", "customer": { "name": "Jack", "phone": "1441", "second_phone": "1122", "email": "c@arcsite.com", "second_email": "s@arcsite.com", "address": { "street": "street", "city": "city", "county": "county", "state": "state", "zip_code": "300433", }, }, "work_site_address": { "street": "street", "city": "city", "county": "county", "state": "state", "zip_code": "300433", }, "sales_rep": { "name": "Wang", "email": "h@arcsite.com", "phone": "122122-121", }, "tags": ["tag1", "tag2"], },)data = response.json()Parameters
Section titled “Parameters”| Parameter | Type | Description |
|---|---|---|
| name | String | (required) Name of the project |
| operator | String | (required) Who updates the project |
| customer | Customer | (optional) Customer profile of the project |
| job_number | String | (optional) Job number of the project |
| work_site_address | Address | (optional) Worksite address of the project |
| sales_rep | SalesRep | (optional) Sales Representative of the project |
| tags | List[String] | (optional) Tags for this project |
Get Project
Section titled “Get Project”Returns a project in your organization by project ID.
GET https://api.arcsite.com/v1/projects/<id>
curl "https://api.arcsite.com/v1/projects/<ID>" \ -H "Authorization: Bearer your_api_token_here"const response = await fetch("https://api.arcsite.com/v1/projects/<ID>", { headers: { Authorization: "Bearer your_api_token_here", },});const data = await response.json();import requests
response = requests.get( "https://api.arcsite.com/v1/projects/<ID>", headers={"Authorization": "Bearer your_api_token_here"},)data = response.json(){ "id": 36029621652695040, "name": "project 4", "created_at": "2022-01-16T04:19:23", "updated_at": "2022-01-16T04:19:23", "job_number": "144111", "customer": { "name": "Jack", "phone": "1441", "second_phone": "1122", "email": "c@arcsite.com", "second_email": "s@arcsite.com", "address": { "street": "street", "city": "city", "county": "county", "state": "state", "zip_code": "300433" } }, "work_site_address": { "street": "street", "city": "city", "county": "county", "state": "state", "zip_code": "300433" }, "sales_rep": { "name": "Wang", "email": "h@arcsite.com", "phone": "122122-121" }, "tags": ["tag1", "tag2"], "archived": false}Search Projects
Section titled “Search Projects”Searches projects by conditions and returns the list of filtered projects in your organization. Projects are returned in sorted order, with the most recently created project appearing first.
POST https://api.arcsite.com/v1/projects/search
curl -X POST 'https://api.arcsite.com/v1/projects/search' \ -H 'Authorization: Bearer your_api_token_here' \ -H 'Content-Type: application/json' \ -d '{ "project_name": "Updated project name", "tags": ["Tag 1"] }'const response = await fetch("https://api.arcsite.com/v1/projects/search", { method: "POST", headers: { Authorization: "Bearer your_api_token_here", "Content-Type": "application/json", }, body: JSON.stringify({ project_name: "Updated project name", tags: ["Tag 1"], }),});const data = await response.json();import requests
response = requests.post( "https://api.arcsite.com/v1/projects/search", headers={"Authorization": "Bearer your_api_token_here"}, json={ "project_name": "Updated project name", "tags": ["Tag 1"], },)data = response.json()[ { "id": 36029621652695040, "name": "Updated project name", "created_at": "2022-01-16T04:19:23", "updated_at": "2022-01-16T04:19:23", "job_number": "144111", "customer": { "name": "Jack", "phone": "1441", "second_phone": "1122", "email": "c@arcsite.com", "second_email": "s@arcsite.com", "address": { "street": "street", "city": "city", "county": "county", "state": "state", "zip_code": "300433" } }, "work_site_address": { "street": "street", "city": "city", "county": "county", "state": "state", "zip_code": "300433" }, "sales_rep": { "name": "Wang", "email": "h@arcsite.com", "phone": "122122-121" }, "tags": ["Tag 1"], "archived": false }]Parameters
Section titled “Parameters”| Parameter | Type | Description |
|---|---|---|
| project_name | String | (optional) To filter projects which contain the value |
| tags | List[String] | (optional) To filter projects by the tags list |
Add Project Collaborators
Section titled “Add Project Collaborators”Adds collaborators to a project. Successfully added collaborators are in the success_items field of the response, and failed items are in fail_items. This API is idempotent, so the same collaborator can be added multiple times.
POST https://api.arcsite.com/v1/projects/<id>/add_collaborators
curl -X POST 'https://api.arcsite.com/v1/projects/<ID>/add_collaborators' \ -H 'Authorization: Bearer your_api_token_here' \ -H 'Content-Type: application/json' \ -d '{ "collaborators": [ { "email": "dev@arctuition.com", "role": "PROJECT_ADMIN" }, { "email": "haowe12@arctui1tion.com", "role": "PROJECT_ADMIN" } ] }'const response = await fetch("https://api.arcsite.com/v1/projects/<ID>/add_collaborators", { method: "POST", headers: { Authorization: "Bearer your_api_token_here", "Content-Type": "application/json", }, body: JSON.stringify({ collaborators: [ { email: "dev@arctuition.com", role: "PROJECT_ADMIN" }, { email: "haowe12@arctui1tion.com", role: "PROJECT_ADMIN" }, ], }),});const data = await response.json();import requests
response = requests.post( "https://api.arcsite.com/v1/projects/<ID>/add_collaborators", headers={"Authorization": "Bearer your_api_token_here"}, json={ "collaborators": [ {"email": "dev@arctuition.com", "role": "PROJECT_ADMIN"}, {"email": "haowe12@arctui1tion.com", "role": "PROJECT_ADMIN"}, ], },)data = response.json(){ "success_items": [ { "email": "dev@arctuition.com", "role": "PROJECT_ADMIN" } ], "fail_items": [ { "data": { "email": "haowe12@arctui1tion.com", "role": "PROJECT_ADMIN" }, "message": "haowe12@arctui1tion.com has not been added to your company account yet." } ]}Parameters
Section titled “Parameters”| Parameter | Type | Description |
|---|---|---|
| collaborators | List[Collaborator] | (required) collaborators to add |
Collaborator
Section titled “Collaborator”| Parameter | Type | Description |
|---|---|---|
| string | (required) The username or email of the collaborator | |
| role | Role | (required) Project role |
PROJECT_ADMIN— Project admins have full access to the project.PROJECT_COLLABORATOR— Can create, edit, and delete drawings. This role cannot delete the project or manage collaborators.PROJECT_VIEWER— Project viewers can only view drawings.
Remove Project Collaborators
Section titled “Remove Project Collaborators”Removes collaborators from a project.
POST https://api.arcsite.com/v1/projects/<id>/remove_collaborators
curl -X POST 'https://api.arcsite.com/v1/projects/<ID>/remove_collaborators' \ -H 'Authorization: Bearer your_api_token_here' \ -H 'Content-Type: application/json' \ -d '{ "emails": [ "dev@arctuition.com", "haowe12@arctui1tion.com" ] }'const response = await fetch("https://api.arcsite.com/v1/projects/<ID>/remove_collaborators", { method: "POST", headers: { Authorization: "Bearer your_api_token_here", "Content-Type": "application/json", }, body: JSON.stringify({ emails: ["dev@arctuition.com", "haowe12@arctui1tion.com"], }),});const data = await response.json();import requests
response = requests.post( "https://api.arcsite.com/v1/projects/<ID>/remove_collaborators", headers={"Authorization": "Bearer your_api_token_here"}, json={ "emails": ["dev@arctuition.com", "haowe12@arctui1tion.com"], },)data = response.json()Parameters
Section titled “Parameters”| Parameter | Type | Description |
|---|---|---|
| emails | List[String] | (required) emails to remove |
Get Project Drawings
Section titled “Get Project Drawings”Returns the drawings of a project.
GET https://api.arcsite.com/v1/projects/<id>/drawings
curl "https://api.arcsite.com/v1/projects/<ID>/drawings" \ -H "Authorization: Bearer your_api_token_here"const response = await fetch("https://api.arcsite.com/v1/projects/<ID>/drawings", { headers: { Authorization: "Bearer your_api_token_here", },});const data = await response.json();import requests
response = requests.get( "https://api.arcsite.com/v1/projects/<ID>/drawings", headers={"Authorization": "Bearer your_api_token_here"},)data = response.json()[ { "id": "36029621653385418", "name": "drawing 1" }, { "id": "36029621653385407", "name": "drawing 2" }]Query Parameters
Section titled “Query Parameters”| Parameter | Default | In | Description |
|---|---|---|---|
| page | 1 | query | Request a specific page |
| per_page | 10 | query | Page size |
Import PDF
Section titled “Import PDF”Your uploaded PDF will be split into multiple pages; one ArcSite drawing is created for each page.
POST https://api.arcsite.com/v1/projects/<project_id>/import_pdf
# upload a local filecurl --location 'https://api.arcsite.com/v1/projects/<project_id>/import_pdf' \ -H "Authorization: Bearer your_api_token_here" \ --form 'file=@"/<file_path>/<file_name.pdf>"'
# or pass the file url directlycurl --location 'https://api.arcsite.com/v1/projects/<project_id>/import_pdf' \ -H "Authorization: Bearer your_api_token_here" \ --form 'file_url="https://file_url.pdf"'// upload a local fileconst form = new FormData();form.append("file", fileInput.files[0]);
// or pass a file URL directly:// form.append("file_url", "https://file_url.pdf");
const response = await fetch("https://api.arcsite.com/v1/projects/<project_id>/import_pdf", { method: "POST", headers: { Authorization: "Bearer your_api_token_here", }, body: form,});const data = await response.json();import requests
# upload a local filewith open("/path/to/file.pdf", "rb") as f: response = requests.post( "https://api.arcsite.com/v1/projects/<project_id>/import_pdf", headers={"Authorization": "Bearer your_api_token_here"}, files={"file": f}, )
# or pass a file URL directly:# response = requests.post(# "https://api.arcsite.com/v1/projects/<project_id>/import_pdf",# headers={"Authorization": "Bearer your_api_token_here"},# data={"file_url": "https://file_url.pdf"},# )data = response.json(){ "drawings": [ { "id": "36029621653385418" }, { "id": "36029621653385407" } ]}Request Payload
Section titled “Request Payload”| Parameter | In | Description |
|---|---|---|
| file | Body | The binary PDF file to be uploaded |
| file_url | Body | The URL of a publicly accessible PDF file |
Archive Project
Section titled “Archive Project”Archives a project by project ID. The archived project will be hidden from the project list. You can use Unarchive Project to unarchive it.
POST https://api.arcsite.com/v1/projects/<ID>/archive
curl -X POST 'https://api.arcsite.com/v1/projects/<ID>/archive' \ -H 'Authorization: Bearer your_api_token_here' \ -H 'Content-Type: application/json'const response = await fetch("https://api.arcsite.com/v1/projects/<ID>/archive", { method: "POST", headers: { Authorization: "Bearer your_api_token_here", },});const data = await response.json();import requests
response = requests.post( "https://api.arcsite.com/v1/projects/<ID>/archive", headers={"Authorization": "Bearer your_api_token_here"},)data = response.json(){}Unarchive Project
Section titled “Unarchive Project”Unarchives a project by project ID.
POST https://api.arcsite.com/v1/projects/<ID>/unarchive
curl -X POST 'https://api.arcsite.com/v1/projects/<ID>/unarchive' \ -H 'Authorization: Bearer your_api_token_here' \ -H 'Content-Type: application/json'const response = await fetch("https://api.arcsite.com/v1/projects/<ID>/unarchive", { method: "POST", headers: { Authorization: "Bearer your_api_token_here", },});const data = await response.json();import requests
response = requests.post( "https://api.arcsite.com/v1/projects/<ID>/unarchive", headers={"Authorization": "Bearer your_api_token_here"},)data = response.json(){}Transfer Project Owner
Section titled “Transfer Project Owner”Transfers ownership of a project to another user. The new owner must belong to the same organization.
POST https://api.arcsite.com/v1/projects/<ID>/transfer_owner
curl -X POST 'https://api.arcsite.com/v1/projects/<ID>/transfer_owner' \ -H 'Authorization: Bearer your_api_token_here' \ -H 'Content-Type: application/json' \ -d '{ "owner": "newowner@example.com" }'const response = await fetch("https://api.arcsite.com/v1/projects/<ID>/transfer_owner", { method: "POST", headers: { Authorization: "Bearer your_api_token_here", "Content-Type": "application/json", }, body: JSON.stringify({ owner: "newowner@example.com", }),});const data = await response.json();import requests
response = requests.post( "https://api.arcsite.com/v1/projects/<ID>/transfer_owner", headers={"Authorization": "Bearer your_api_token_here"}, json={ "owner": "newowner@example.com", },)data = response.json(){}Parameters
Section titled “Parameters”| Parameter | Type | Description |
|---|---|---|
| owner | String | (required) Email or full name (first name + last name) of new owner |