Skip to content

Proposals

Returns a list of proposal templates of your organization.

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

Terminal window
curl "https://api.arcsite.com/v1/proposal_templates" \
-H "Authorization: Bearer your_api_token_here"
Response
[
{
"id": "36029621652695041",
"name": "Proposal Template 1"
}
]
ParameterDefaultInDescription
page1queryRequest a specific page
per_page10queryPage size

Returns a list of proposals of your organization. You can filter by project and paginate; proposals are sorted by most recent activity first. For a change order chain, only the latest version is returned; see Change Orders.

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

Terminal window
curl "https://api.arcsite.com/v1/proposals" \
-H "Authorization: Bearer your_api_token_here"
Response
[
{
"proposal_id": "123",
"project_id": "456",
"name": "Main Building Proposal",
"status": "APPROVED",
"sales_representative": "John Doe",
"contact_email": "john@example.com",
"customer_name": "Jane Smith",
"customer_email": "jane@example.com",
"document_number": "PROP-2024-001",
"template_id": "36029621652695041",
"total": 15000.0,
"pdf_url": "https://d1umxpetlubu85.cloudfront.net/36029346774973628/36029621653386370/36029621653386685/c6f62f3d-db06-42df-8138-91d80e792e5d/Drawing_1_Pre-Survey_Proposal_-281-29-page_03_test-page_02_test.pdf",
"approved_option": {
"id": "789",
"drawing_id": "abc123def456",
"drawing_version_id": "441f328-1a1b-4882-bd26-c86ee5a7bb0f"
},
"initial_proposal_id": "111"
}
]
ParameterDefaultInDescription
project_id-query(optional) Project ID to filter proposals.
page1query(optional) Request a specific page.
per_page10query(optional) Page size.

Each item in the response array is a Proposal object with the following fields. Some fields are returned only for specific statuses.

ParameterTypeDescription
proposal_idStringProposal ID
project_idStringProject ID the proposal belongs to
nameStringProposal name
statusStringProposal status. See the status values below.
sales_representativeStringName of the sales representative
contact_emailStringEmail of the sales representative
customer_nameStringCustomer name
customer_emailStringCustomer email
document_numberStringProposal document number
template_idStringProposal template ID
close_noteString(optional) Reason for closing the proposal. Present when status is VOID or LOST.
totalNumber(optional) Total amount of the proposal. Present once the proposal is approved: status is APPROVED, PARTIALLY_PAID, PAID or OVER_PAID. For a change order, this is the full revised amount; see Change Orders.
pdf_urlString(optional) URL of the proposal PDF file. Present once the proposal is approved.
approved_optionApprovedOption(optional) Approved option information. Present once the proposal is approved.
initial_proposal_idString(optional) ID of the initial proposal. Only present for change order proposals.
ParameterTypeDescription
idString(optional) ID of the approved option, only for online approvals.
drawing_idStringID of the associated drawing resource.
drawing_version_idString(optional) ID of the approved drawing version, only for online approvals.

Returns one proposal by proposal ID. The response uses the same base Proposal fields as Query Proposals. For online proposals, the response also includes proposal_options, which can be used to link unsold proposals to the drawing versions they were generated from.

GET https://api.arcsite.com/v1/proposals/<proposal_id>

Terminal window
curl "https://api.arcsite.com/v1/proposals/<proposal_id>" \
-H "Authorization: Bearer your_api_token_here"
Response
{
"proposal_id": "123",
"project_id": "456",
"name": "Main Building Proposal",
"status": "PENDING",
"sales_representative": "John Doe",
"contact_email": "john@example.com",
"customer_name": "Jane Smith",
"customer_email": "jane@example.com",
"document_number": "PROP-2024-001",
"template_id": "36029621652695041",
"proposal_options": [
{
"id": "789",
"name": "Option 1",
"drawing_id": "abc123def456",
6 collapsed lines
"drawing_version_id": "441f328-1a1b-4882-bd26-c86ee5a7bb0f",
"total": 15000.0,
"pdf_url": "https://d1umxpetlubu85.cloudfront.net/36029346774973628/36029621653386370/36029621653386685/c6f62f3d-db06-42df-8138-91d80e792e5d/Drawing_1_Pre-Survey_Proposal_-281-29-page_03_test-page_02_test.pdf"
}
]
}
ParameterTypeDescription
proposal_idString(required) Proposal ID

The response is a Proposal object with the fields documented in the Proposal schema. Online proposals also include the following field:

ParameterTypeDescription
proposal_optionsList[ProposalOption](optional) Full list of proposal options for online proposals, including drawing and PDF details
ParameterTypeDescription
idStringID of this proposal option
nameStringProposal option name
drawing_idStringID of the drawing resource used to generate this option
drawing_version_idStringID of the drawing version used to generate this option
totalNumberTotal amount for this proposal option
pdf_urlStringTime-limited URL of the proposal option PDF file

For an approved online proposal, match approved_option.id to proposal_options[].id to identify the approved option. Different options can share a drawing_id, so the drawing ID alone does not identify the approved option.

const approvedOption = data.proposal_options.find(
(option) => option.id === data.approved_option.id,
);

Export Proposal PDF by giving the proposal template id.

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

Terminal window
curl "https://api.arcsite.com/v1/export_proposal_pdf" \
-H "Authorization: Bearer your_api_token_here"
Response
{
"url": "https://d1umxpetlubu85.cloudfront.net/36029346774973628/36029621653386370/36029621653386685/c6f62f3d-db06-42df-8138-91d80e792e5d/Drawing_1_Pre-Survey_Proposal_-281-29-page_03_test-page_02_test.pdf"
}
ParameterTypeDescription
template_idString(required) Template id from Query proposal templates
drawing_idString(required) Drawing id

Returns a list of payments that have been received for the specified proposal.

GET https://api.arcsite.com/v1/proposals/<proposal_id>/payments

Terminal window
curl "https://api.arcsite.com/v1/proposals/<proposal_id>/payments" \
-H "Authorization: Bearer your_api_token_here"
Response
[
{
"paid_amount": 2500.0,
"pay_channel": "arcsite_payment",
"paid_time": "2025-11-06T10:15:30Z",
"payment_method": "Credit Card",
"status": "succeeded",
"refunded_amount": 500.0
},
{
"paid_amount": 1000.0,
"pay_channel": "mark_as_paid",
"paid_date": "2025-11-07",
"payment_method": "Check",
"status": "succeeded"
}
]

The response is an array of Payment objects with the following fields:

FieldTypeDescription
paid_amountNumberThe amount paid
pay_channelStringChannel through which payment was received. Values: arcsite_payment or mark_as_paid
paid_timeStringISO 8601 datetime when payment was received. Present when pay_channel is arcsite_payment
paid_dateStringDate when payment was recorded (YYYY-MM-DD format). Present when pay_channel is mark_as_paid
payment_methodStringMethod of payment (e.g., “Credit Card”, “Check”, “ACH”)
statusStringPayment status. Values: succeeded (payment successful) or returned (ACH Return occurred)
refunded_amountNumber(optional) Amount refunded. Only included for payments that have at least one refund record. Subtract this from paid_amount to get the net amount received

A change order revises a proposal that has already been approved. ArcSite creates it as a new proposal in the same chain as the original, and it carries initial_proposal_id, the ID of the first proposal in the chain.

  • The total of a change order is the full revised contract amount, not the amount added or removed. Use it in place of the earlier version’s total; do not add the two together.
  • Each new change order replaces the previous version. Query Proposals returns only the latest version in each chain. Earlier versions are still available from Get Proposal by ID.
  • A change order has no total until it is approved. Keep the amount of the last approved version until then.
  • Get Proposal Payments for a change order includes the payments received on the earlier versions in its chain.