Proposals
Query Proposal Templates
Section titled “Query Proposal Templates”Returns a list of proposal templates of your organization.
GET https://api.arcsite.com/v1/proposal_templates
curl "https://api.arcsite.com/v1/proposal_templates" \ -H "Authorization: Bearer your_api_token_here"const response = await fetch("https://api.arcsite.com/v1/proposal_templates", { headers: { Authorization: "Bearer your_api_token_here", },});const data = await response.json();import requests
response = requests.get( "https://api.arcsite.com/v1/proposal_templates", headers={"Authorization": "Bearer your_api_token_here"},)data = response.json()[ { "id": "36029621652695041", "name": "Proposal Template 1" }]Query Parameters
Section titled “Query Parameters”| Parameter | Default | In | Description |
|---|---|---|---|
| page | 1 | query | Request a specific page |
| per_page | 10 | query | Page size |
Query Proposals
Section titled “Query Proposals”Returns a list of proposals of your organization. You can filter by project and paginate; proposals are sorted by most recent activity first.
GET https://api.arcsite.com/v1/proposals
curl "https://api.arcsite.com/v1/proposals" \ -H "Authorization: Bearer your_api_token_here"const response = await fetch("https://api.arcsite.com/v1/proposals", { headers: { Authorization: "Bearer your_api_token_here", },});const data = await response.json();import requests
response = requests.get( "https://api.arcsite.com/v1/proposals", headers={"Authorization": "Bearer your_api_token_here"},)data = response.json()[ { "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" }, "initial_proposal_id": "111" }]Query Parameters
Section titled “Query Parameters”| Parameter | Default | In | Description |
|---|---|---|---|
| project_id | - | query | (optional) Project ID to filter proposals. |
| page | 1 | query | (optional) Request a specific page. |
| per_page | 10 | query | (optional) Page size. |
Proposal
Section titled “Proposal”Each item in the response array is a Proposal object with the following fields. Some fields are returned only for specific statuses.
| Parameter | Type | Description |
|---|---|---|
| proposal_id | String | Proposal ID |
| project_id | String | Project ID the proposal belongs to |
| name | String | Proposal name |
| status | String | Proposal status (DRAFT/PENDING/VOID/LOST/APPROVED). |
| sales_representative | String | Name of the sales representative |
| contact_email | String | Email of the sales representative |
| customer_name | String | Customer name |
| customer_email | String | Customer email |
| document_number | String | Proposal document number |
| template_id | String | Proposal template ID |
| close_note | String | (optional) Reason for closing the proposal. Present when status is VOID or LOST. |
| total | Number | (optional) Total amount of the proposal. Present when status is APPROVED. |
| pdf_url | String | (optional) URL of the proposal PDF file. Present when status is APPROVED. |
| approved_option | ApprovedOption | (optional) Approved option information. Present when status is APPROVED. |
| initial_proposal_id | String | (optional) ID of the initial proposal. Only present for change order proposals. |
ApprovedOption
Section titled “ApprovedOption”| Parameter | Type | Description |
|---|---|---|
| id | String | (optional) Only for online approvals. |
| drawing_id | String | ID of the associated drawing resource. |
Get Proposal by ID
Section titled “Get Proposal by ID”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>
curl "https://api.arcsite.com/v1/proposals/<proposal_id>" \ -H "Authorization: Bearer your_api_token_here"const response = await fetch("https://api.arcsite.com/v1/proposals/<proposal_id>", { headers: { Authorization: "Bearer your_api_token_here", },});const data = await response.json();import requests
response = requests.get( "https://api.arcsite.com/v1/proposals/<proposal_id>", headers={"Authorization": "Bearer your_api_token_here"},)data = response.json(){ "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": [ { "name": "Option 1", "drawing_id": "abc123def456", "drawing_version_id": "441f328-1a1b-4882-bd26-c86ee5a7bb0f",5 collapsed lines
"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" } ]}Parameters
Section titled “Parameters”| Parameter | Type | Description |
|---|---|---|
| proposal_id | String | (required) Proposal ID |
Response Schema
Section titled “Response Schema”The response is a Proposal object with the fields documented in the Proposal schema. Online proposals also include the following field:
| Parameter | Type | Description |
|---|---|---|
| proposal_options | List[ProposalOption] | (optional) Full list of proposal options for online proposals, including drawing and PDF details |
ProposalOption
Section titled “ProposalOption”| Parameter | Type | Description |
|---|---|---|
| name | String | Proposal option name |
| drawing_id | String | ID of the drawing resource used to generate this option |
| drawing_version_id | String | ID of the drawing version used to generate this option |
| total | Number | Total amount for this proposal option |
| pdf_url | String | Time-limited URL of the proposal option PDF file |
Export Proposal PDF
Section titled “Export Proposal PDF”Export Proposal PDF by giving the proposal template id.
POST https://api.arcsite.com/v1/export_proposal_pdf
curl "https://api.arcsite.com/v1/export_proposal_pdf" \ -H "Authorization: Bearer your_api_token_here"const response = await fetch("https://api.arcsite.com/v1/export_proposal_pdf", { method: "POST", headers: { Authorization: "Bearer your_api_token_here", },});const data = await response.json();import requests
response = requests.post( "https://api.arcsite.com/v1/export_proposal_pdf", headers={"Authorization": "Bearer your_api_token_here"},)data = response.json(){ "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"}Parameters
Section titled “Parameters”| Parameter | Type | Description |
|---|---|---|
| template_id | String | (required) Template id from Query proposal templates |
| drawing_id | String | (required) Drawing id |
Get Proposal Payments
Section titled “Get Proposal Payments”Returns a list of payments that have been received for the specified proposal.
GET https://api.arcsite.com/v1/proposals/<proposal_id>/payments
curl "https://api.arcsite.com/v1/proposals/<proposal_id>/payments" \ -H "Authorization: Bearer your_api_token_here"const response = await fetch("https://api.arcsite.com/v1/proposals/<proposal_id>/payments", { headers: { Authorization: "Bearer your_api_token_here", },});const data = await response.json();import requests
response = requests.get( "https://api.arcsite.com/v1/proposals/<proposal_id>/payments", headers={"Authorization": "Bearer your_api_token_here"},)data = response.json()[ { "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" }]Response Schema
Section titled “Response Schema”The response is an array of Payment objects with the following fields:
| Field | Type | Description |
|---|---|---|
| paid_amount | Number | The amount paid |
| pay_channel | String | Channel through which payment was received. Values: arcsite_payment or mark_as_paid |
| paid_time | String | ISO 8601 datetime when payment was received. Present when pay_channel is arcsite_payment |
| paid_date | String | Date when payment was recorded (YYYY-MM-DD format). Present when pay_channel is mark_as_paid |
| payment_method | String | Method of payment (e.g., “Credit Card”, “Check”, “ACH”) |
| status | String | Payment status. Values: succeeded (payment successful) or returned (ACH Return occurred) |
| refunded_amount | Number | (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 |