Product Items
You can get product items from a drawing with the following APIs.
- Proposal Items: Product items can be fetched in the way that we generate Product List of Proposal PDF.


-
Excluded Items: Product items that are marked as not included in the proposal.
-
Takeoff Items: Product items can be fetched in the way that we generate Takeoff report in Excel format.


Get Proposal Line items
Section titled “Get Proposal Line items”Get line items by drawing id.
GET https://api.arcsite.com/v1/drawings/<id>/line_items
curl "https://api.arcsite.com/v1/drawings/<ID>/line_items" \ -H "Authorization: Bearer your_api_token_here"const response = await fetch("https://api.arcsite.com/v1/drawings/<ID>/line_items", { headers: { Authorization: "Bearer your_api_token_here", },});const data = await response.json();import requests
response = requests.get( "https://api.arcsite.com/v1/drawings/<ID>/line_items", headers={"Authorization": "Bearer your_api_token_here"},)data = response.json(){ "line_items": [ { "name": "product1", "description": "Product 1 description", "quantity": 2.26, "total": 2.26, "product_id": "19923123", "sku": "sku1", "price": 3.5, "cost": 5, "unit": "Feet", "price_part_items": [ { "name": "Option A", "price_part_name": "Material", "sku": "MAT-001", "price": 10, "cost": 5, "quantity": 2, "unit": "Each" } ] }, { "name": "product2", "description": "Custom item description", "quantity": 1, "total": 128.98, "cost": 200 } ], "subtotal": 131.24, "discount": -31.24, "discount_description": "discount reduce", "markup": 100, "markup_description": "extra fee", "taxes": [ { "name": "a", "total": 20, "tax_rate": 8.0 }, { "name": "b", "total": 30, "tax_rate": 12.0 } ], "total": 250, "drawing_version_id": "36029621652695100"}Query Parameters
Section titled “Query Parameters”| Parameter | Type | In | Description |
|---|---|---|---|
| drawing_version_id | String (optional) | query | The ID of the drawing version. A version of another drawing returns 404. |
Response Schema
Section titled “Response Schema”| Name | Type | Description |
|---|---|---|
| line_items | List[LineItem] | All product line items |
| subtotal | Number | Sum of the line item totals (after per-product adjustments) and custom items, before order-level markups, discounts and taxes. If your organization’s minimum job price is higher, this is the minimum price |
| discount | Number | The total order-level discount, as a negative number (0 if none) |
| discount_description | String? | Description of the discount; null if there is no discount. Empty when several discounts, or a fixed-amount discount, are combined |
| markup | Number | The total amount of markup added (0 if none) |
| markup_description | String? | Description of the first markup; null if there is no markup |
| taxes | List[TaxItem] | All taxes applied |
| total | Number | The grand total after markups, discounts and taxes |
| drawing_version_id | String | The version id of the drawing |
LineItem
Section titled “LineItem”| Name | Type | Description |
|---|---|---|
| name | String | The name of the product |
| description | String? | The description of the product (or of the custom price item) |
| quantity | Number | The quantity of the product (not rounded). Always 1 for custom price items |
| total | Number | Item total after discounts and markup applied |
| price | Number? | Item total before discounts and markup applied; not provided for custom price items |
| cost | Number | Total cost of the line (unit cost × quantity) |
| sku | String? | The stock keeping unit of the product (may be null); not provided for custom price items |
| unit | String? | The unit of measurement for the product’s quantity, e.g. Feet, SQ_Feet, CU_Yards, Each, Hour, or a custom unit name; not provided for custom price items |
| product_id | String? | The ID of the current version of the product; not provided for custom price items |
| price_part_items | List[PricePartItem]? | Detail of price part items; not provided for custom price items |
PricePartItem
Section titled “PricePartItem”| Name | Type | Description |
|---|---|---|
| name | String | The name of price part option |
| price_part_name | String | The name of the price part |
| sku | String? | The sku of price part option (may be null) |
| price | Number | The total price of price part option |
| cost | Number | The total cost of price part option |
| quantity | Number | The total quantity of price part option |
| unit | String | The final unit of price part option |
TaxItem
Section titled “TaxItem”| Name | Type | Description |
|---|---|---|
| name | String | The name of the tax |
| total | Number | The total amount of tax |
| tax_rate | Number | The tax rate in percent (e.g. 8.0 means 8%) |
Get Excluded Line items
Section titled “Get Excluded Line items”Get line items that are not included in the proposal by drawing id.
GET https://api.arcsite.com/v1/drawings/<id>/excluded_line_items
curl "https://api.arcsite.com/v1/drawings/<ID>/excluded_line_items" \ -H "Authorization: Bearer your_api_token_here"const response = await fetch("https://api.arcsite.com/v1/drawings/<ID>/excluded_line_items", { headers: { Authorization: "Bearer your_api_token_here", },});const data = await response.json();import requests
response = requests.get( "https://api.arcsite.com/v1/drawings/<ID>/excluded_line_items", headers={"Authorization": "Bearer your_api_token_here"},)data = response.json()Query Parameters
Section titled “Query Parameters”| Parameter | Type | In | Description |
|---|---|---|---|
| drawing_version_id | String (optional) | query | The ID of the drawing version. A version of another drawing returns 404. |
The response schema is identical to Get Proposal Line Items, where line_items contains only the items not included in the proposal. Custom price items are never part of this response, and subtotal, markup, discount, taxes and total are calculated over the excluded items only.
Get Takeoff Line items
Section titled “Get Takeoff Line items”Get takeoff items by drawing id. Only items included in the proposal are returned; see Get Excluded Line Items for the others.
GET https://api.arcsite.com/v1/drawings/<id>/takeoff_items
curl "https://api.arcsite.com/v1/drawings/<ID>/takeoff_items" \ -H "Authorization: Bearer your_api_token_here"const response = await fetch("https://api.arcsite.com/v1/drawings/<ID>/takeoff_items", { headers: { Authorization: "Bearer your_api_token_here", },});const data = await response.json();import requests
response = requests.get( "https://api.arcsite.com/v1/drawings/<ID>/takeoff_items", headers={"Authorization": "Bearer your_api_token_here"},)data = response.json(){ "takeoff_items": [ { "name": "with attributes", "quantity": 300, "unit": "Amount", "sku": "GM-100", "product_id": "287386775856064026", "items": [ { "quantity": 1, "unit": "Each", "sequence_number": "1", "attributes": [ { "name": "cc", "value": null, "type": "TEXT" }, { "name": "d", "value": "Some text", "type": "TEXT" }, { "name": "yesno", "value": true, "type": "CHECKBOX" }, { "name": "photo", "value": [ "https://files.example.com/photos/F4AF22A9-F011-4214-8729-CAF3F1F9D9F6.jpg?Expires=1700000000&Signature=EXAMPLE&Key-Pair-Id=EXAMPLEKEYPAIR" ], "type": "PHOTO" }, { "name": "start_date", "value": "2024-03-25T09:36:42.031Z", "type": "DATE" } ] } ] } ]}Query Parameters
Section titled “Query Parameters”| Parameter | Type | In | Description |
|---|---|---|---|
| drawing_version_id | String (optional) | query | The ID of the drawing version. A version of another drawing returns 404. |
Response Schema
Section titled “Response Schema”| Name | Type | Description |
|---|---|---|
| takeoff_items | List[TakeoffItemByProduct] | Takeoff items group by product |
TakeoffItemByProduct
Section titled “TakeoffItemByProduct”| Name | Type | Description |
|---|---|---|
| name | String | The name of the product |
| quantity | Number | The total quantity of the product |
| unit | String | The unit of measurement for the product’s quantity |
| sku | String? | The stock keeping unit of the product (may be null) |
| product_id | String | The ID of the product |
| items | List[TakeoffItem] | The takeoff items of the product |
TakeoffItem
Section titled “TakeoffItem”| Name | Type | Description |
|---|---|---|
| quantity | Number | For geometric products, we use the quantity shown in the drawing. For shape or virtual products, the quantity is one, unless the product applies a quantity modifier, in which case the modified quantity and unit are returned. |
| sequence_number | String | Sequence number of the shape on the drawing; an empty string for non-shape products |
| unit | String | The input unit defined by the product |
| attributes | List[TakeoffAttribute] | The attributes of the item |
TakeoffAttribute
Section titled “TakeoffAttribute”| Name | Type | Description |
|---|---|---|
| name | String | The name of the attribute |
| type | String | The type of the attribute. Can be one of “TEXT”, “PHOTO”, “CHECKBOX”, or “DATE”. Paragraph and dropdown attributes are reported as “TEXT”. |
| value | String, List[String], Boolean | (optional) The value of the attribute, or null when it isn’t set. The type of this field depends on the type field: |
- If type is “TEXT”, value is a string, or a list of strings for a multi-select dropdown. | ||
- If type is “PHOTO”, value is a list of photo URLs (an empty list when there are none). The URLs expire in 24 hours. | ||
- If type is “CHECKBOX”, value is a boolean. | ||
- If type is “DATE”, value is a string in ISO format. |