Skip to content

Projects

Returns a list of projects in your organization. Projects are returned in sorted order, with the most recently created project appearing first. Archived projects are included, with archived: true.

GET https://api.arcsite.com/v1/projects

Terminal window
curl "https://api.arcsite.com/v1/projects" \
-H "Authorization: Bearer your_api_token_here"
Response
[
{
"id": "36029621652695040",
"name": "project 4",
"created_at": "2022-01-16T04:19:23.000000Z",
"updated_at": "2022-01-16T04:19:23.000000Z",
"job_number": "144111",
26 collapsed lines
"customer": {
"name": "Jack",
"phone": "1441",
"second_phone": "1122",
"email": "customer@example.com",
"second_email": "customer2@example.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": "sales@example.com",
"phone": "122122-121"
},
"tags": ["tag1", "tag2"],
"archived": false
}
]
ParameterDefaultInDescription
page1queryRequest a specific page
per_page10queryPage size (maximum 100)
created_at_beginNonequery(optional) Only return projects created at or after this time, in UTC ISO 8601 format (e.g., 2025-01-16T04:19:23)
created_at_endNonequery(optional) Only return projects created at or before this time, in UTC ISO 8601 format (e.g., 2025-01-16T04:19:23)

Creates a new project.

POST https://api.arcsite.com/v1/projects

Terminal window
curl -X POST 'https://api.arcsite.com/v1/projects' \
-H 'Authorization: Bearer your_api_token_here' \
-H 'Content-Type: application/json' \
-d '{
"name": "Backyard Fence",
"owner": "owner@example.com",
"job_number": "144111",
"customer": {
"name": "Jack",
"phone": "1441",
"second_phone": "1122",
"email": "customer@example.com",
"second_email": "customer2@example.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": "sales@example.com",
"phone": "122122-121"
},
"tags": ["tag1", "tag2"]
}'
Response
{
"id": "36029621653386360",
"name": "Backyard Fence",
"created_at": "2022-01-16T03:31:39.000000Z",
"updated_at": "2022-01-16T03:31:39.000000Z",
"job_number": "144111",
"customer": {
"name": "Jack",
"phone": "1441",
"second_phone": "1122",
"email": "customer@example.com",
"second_email": "customer2@example.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": "sales@example.com",
"phone": "122122-121"
},
"tags": ["tag1", "tag2"],
"archived": false
}
ParameterTypeDescription
nameString(required) Name of the project
ownerString(required) Owner of the project
customerCustomer(optional) Customer profile of the project
job_numberString(optional) Job number of the project
work_site_addressAddress(optional) Worksite address of the project
sales_repSalesRep | String(optional) Sales Representative of the project. Either a SalesRep object, or the email of an active user in your organization, in which case the sales rep’s name, email and phone are taken from that user’s profile.
tagsList[String](optional) Tags added to this project

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.

  1. Project name must be unique across the same organization.
  2. Project name cannot contain any of the following characters: : / \.
  3. Project name cannot start with ..
  4. Project name must be less than or equal to 200 characters.

Create Project adjusts a name that breaks rules 2–4 instead of rejecting it: : / \ become spaces, a leading . is removed, the name is cut to 200 characters, and surrounding whitespace is trimmed. Use the name in the response as the stored name. Update Project rejects such a name with 400.

If your organization already has a project with the same name, the request returns 400 Bad Request:

Duplicate name response
{
"message": "Project name Backyard Fence already exists, please use another name."
}

Other invalid requests, such as a missing required field, also return 400.

ParameterTypeDescription
nameString(optional) Customer name
phoneString(optional) Customer phone
second_phoneString(optional) Customer secondary phone
emailString(optional) Customer email. Must be a valid email address
second_emailString(optional) Customer secondary email. Must be a valid email address
addressAddress(optional) Customer address
ParameterTypeDescription
streetString(optional) Street name
cityString(optional) City name
countyString(optional) County name
stateString(optional) State name
zip_codeString(optional) Zip code
ParameterTypeDescription
nameString(optional) Sales rep name
emailString(optional) Sales rep email. Must be a valid email address
phoneString(optional) Sales rep phone

Updates an existing project.

PATCH https://api.arcsite.com/v1/projects/<id>

Terminal window
curl -X PATCH 'https://api.arcsite.com/v1/projects/<ID>' \
-H 'Authorization: Bearer your_api_token_here' \
-H 'Content-Type: application/json' \
-d '{
"operator": "admin@example.com",
"name": "Backyard Fence",
"job_number": "144111",
"customer": {
"name": "Jack",
"phone": "1441",
"second_phone": "1122",
"email": "customer@example.com",
"second_email": "customer2@example.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": "sales@example.com",
"phone": "122122-121"
},
"tags": ["tag1", "tag2"]
}'
ParameterTypeDescription
operatorString(required) Who updates the project
nameString(optional) New name of the project
customerCustomer(optional) Customer profile of the project
job_numberString(optional) Job number of the project
work_site_addressAddress(optional) Worksite address of the project
sales_repSalesRep | String(optional) Sales Representative of the project. Same format as in Create Project.
tagsList[String](optional) Tags for this project

The response is the updated project, in the same format as the Create Project response.

Returns a project in your organization by project ID.

GET https://api.arcsite.com/v1/projects/<id>

Terminal window
curl "https://api.arcsite.com/v1/projects/<ID>" \
-H "Authorization: Bearer your_api_token_here"
Response
{
"id": "36029621652695040",
"name": "project 4",
"created_at": "2022-01-16T04:19:23.000000Z",
"updated_at": "2022-01-16T04:19:23.000000Z",
"job_number": "144111",
"customer": {
"name": "Jack",
"phone": "1441",
"second_phone": "1122",
"email": "customer@example.com",
"second_email": "customer2@example.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": "sales@example.com",
"phone": "122122-121"
},
"tags": ["tag1", "tag2"],
"archived": false,
"owner": "owner@example.com"
}

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

Terminal window
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"]
}'
Response
[
{
"id": "36029621652695040",
"name": "Updated project name",
"created_at": "2022-01-16T04:19:23.000000Z",
"updated_at": "2022-01-16T04:19:23.000000Z",
"job_number": "144111",
"customer": {
"name": "Jack",
"phone": "1441",
"second_phone": "1122",
"email": "customer@example.com",
"second_email": "customer2@example.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": "sales@example.com",
"phone": "122122-121"
},
"tags": ["Tag 1"],
"archived": false
}
]
ParameterTypeDescription
project_nameString(optional) Return projects whose name contains this value (case-insensitive)
tagsList[String](optional) Return projects that have all of these tags (case-sensitive)
pageInteger(optional) Page to return, starting at 1. Defaults to 1
per_pageInteger(optional) Page size. Defaults to 10, maximum 100

Returns everyone who has access to the project — both users added directly and user groups the project is shared with. The owner never appears in this list; their email is available as owner in Get Project. Only active users are listed: users whose account is pending activation or deactivated are omitted.

GET https://api.arcsite.com/v1/projects/<id>/collaborators

Terminal window
curl "https://api.arcsite.com/v1/projects/<ID>/collaborators" \
-H "Authorization: Bearer your_api_token_here"
Response
{
"collaborators": [
{ "type": "user", "email": "admin@example.com", "role": "PROJECT_ADMIN" },
{ "type": "user", "email": "dev@example.com", "role": "PROJECT_COLLABORATOR" },
{
"type": "group",
"group_id": "36029621652695041",
"name": "Sales Team",
"role": "PROJECT_VIEWER"
}
]
}

Each entry is either a user or a user group, distinguished by type:

FieldTypeDescription
typeStringuser or group
emailString(user only) Email of the collaborator
group_idString(group only) Id of the user group, see Get User Group
nameString(group only) Name of the user group
roleRoleProject role of the user, or of every member of the group. Same values as accepted by 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. Adding an existing collaborator with a different role adds that role; it doesn’t replace the current one. To lower a collaborator’s role, remove them and add them again.

POST https://api.arcsite.com/v1/projects/<id>/add_collaborators

Terminal window
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@example.com", "role": "PROJECT_ADMIN" },
{ "email": "unknown@example.com", "role": "PROJECT_ADMIN" }
]
}'
Response
{
"success_items": [
{
"email": "dev@example.com",
"role": "PROJECT_ADMIN"
}
],
"fail_items": [
{
"data": {
"email": "unknown@example.com",
"role": "PROJECT_ADMIN"
},
"message": "unknown@example.com has not been added to your company account yet."
}
]
}
ParameterTypeDescription
collaboratorsList[Collaborator](required) collaborators to add
ParameterTypeDescription
emailString(required) Email of the collaborator. Must be a valid email address; an invalid value fails the whole request with 400
roleRole(required) Project role
  1. PROJECT_ADMIN — Project admins have full access to the project.
  2. PROJECT_COLLABORATOR — Can create, edit, and delete drawings. This role cannot delete the project or manage collaborators.
  3. PROJECT_VIEWER — Project viewers can only view drawings.

Removes collaborators from a project.

POST https://api.arcsite.com/v1/projects/<id>/remove_collaborators

Terminal window
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@example.com",
"unknown@example.com"
]
}'
ParameterTypeDescription
emailsList[String](required) emails to remove
Response
{}

Emails that aren’t collaborators on the project are ignored. User groups shared with the project can’t be removed with this endpoint.

Returns a user group of your organization with its members. Use the group_id from Get Project Collaborators to expand a shared group into individual users.

GET https://api.arcsite.com/v1/user_groups/<id>

Terminal window
curl "https://api.arcsite.com/v1/user_groups/<ID>" \
-H "Authorization: Bearer your_api_token_here"
Response
{
"id": "36029621652695041",
"name": "Sales Team",
"members": [
{
"user_id": "36029621652695042",
"name": "Bob Smith",
"email": "bob@example.com"
},
{
"user_id": "36029621652695043",
"name": "Jane Doe",
"email": "jane@example.com"
}
]
}
FieldTypeDescription
user_idStringId of the user
nameStringFull name of the user
emailStringEmail of the user

Only active users are listed as members.

Returns the drawings of a project, newest first.

GET https://api.arcsite.com/v1/projects/<id>/drawings

Terminal window
curl "https://api.arcsite.com/v1/projects/<ID>/drawings" \
-H "Authorization: Bearer your_api_token_here"
Response
[
{
"id": "36029621653385418",
"name": "drawing 1"
},
{
"id": "36029621653385407",
"name": "drawing 2"
}
]
ParameterDefaultInDescription
page1queryRequest a specific page
per_page10queryPage size (maximum 100)

Your uploaded PDF will be split into multiple pages; one ArcSite drawing is created for each page.

POST https://api.arcsite.com/v1/projects/<id>/import_pdf

Terminal window
# upload a local file
curl --location 'https://api.arcsite.com/v1/projects/<ID>/import_pdf' \
-H "Authorization: Bearer your_api_token_here" \
--form 'file=@"/<file_path>/<file_name.pdf>"'
# or pass the file url directly
curl --location 'https://api.arcsite.com/v1/projects/<ID>/import_pdf' \
-H "Authorization: Bearer your_api_token_here" \
--form 'file_url="https://example.com/plan.pdf"'
Response
{
"drawings": [
{
"id": "36029621653385418"
},
{
"id": "36029621653385407"
}
]
}
ParameterInDescription
fileBodyThe binary PDF file to be uploaded
file_urlBodyThe URL of a publicly accessible PDF file

file_url must be an https URL on the public internet that returns the PDF directly: redirects and credentials in the URL aren’t allowed, the file can be at most 100 MB, and the server must respond within 20 seconds.

The request is processed synchronously, so it can take a while for large PDFs. A page that fails to process is skipped, so drawings can have fewer entries than the PDF has pages.

Errors: 400 when file and file_url are both missing or both present, when the URL can’t be downloaded, or when the file isn’t a valid PDF (including corrupted and password-protected files). 403 when your organization has reached its limit of drawings created from PDF files.

Archives a project by project ID. The archived project will be hidden from the project list in the ArcSite apps. Query Projects and Search Projects still return it, with archived: true. You can use Unarchive Project to unarchive it.

POST https://api.arcsite.com/v1/projects/<ID>/archive

Terminal window
curl -X POST 'https://api.arcsite.com/v1/projects/<ID>/archive' \
-H 'Authorization: Bearer your_api_token_here' \
-H 'Content-Type: application/json'
Response
{}

Unarchives a project by project ID.

POST https://api.arcsite.com/v1/projects/<ID>/unarchive

Terminal window
curl -X POST 'https://api.arcsite.com/v1/projects/<ID>/unarchive' \
-H 'Authorization: Bearer your_api_token_here' \
-H 'Content-Type: application/json'
Response
{}

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

Terminal window
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"
}'
Response
{}
ParameterTypeDescription
ownerString(required) Email or full name (first name + last name) of new owner

Errors: 404 if no active user in your organization matches owner, and 400 if the user already owns the project or the project can’t be transferred.