Why This Matters
APIs let you connect SubcontractorHub with your other business tools and automate data transfers. Even if you're not a developer yourself, understanding what's possible helps you work with your tech team to build powerful, time-saving integrations.
What You'll Need
Your SubcontractorHub API key (found in Settings → API)
A developer or tech-savvy team member to help with setup
A tool like Postman (free) to test API calls
How It Works
Public URL:https://api.virtualsaleportal.com/api/public/v2/get-projects/{:uniqueId}(GET)Note: The unique_id can be subhub_id or external_id. Example Response:{ " external_id": null, " job_type": "Solar", " street": "5417 Ariel Lane", " city": "Tracy", " state": "California", " county": null, " postal_code": "95377", " country": "United States", " territory":
"California, CA", " latitude": 37.691453, " longitude": -121.4783999, " downpayment": 0, " discounts_total": 0, " base_system_cost": 9975.2, " battery_total": 0, " adders_total": 24.8, " dealer_fee": 0, " annual_usage": 12000, " stages": [ { " label": "Contract Approved", " field_key": " m1_approved_date", " type": " date_time",
" value": null } ]," subhub_id": 7834, " contract_amount": 10000, " utility_company": null, " utility_bill": 3180, " module_name": "Aptos 370W DNA 120", " module_manufacturer": "Aptos Solar Technology", " module_watts": 370, " module_description": null, " module_total_panels": 0, " inverter_name": "MAC-800", " inverter_manufacturer": "Aptos",
" inverter_quantity": 0, " battery_name": null, " battery_manufacturer": null, " battery_price": 0, " battery_size_kwh": 0, " battery_quantity": 0, " annual_production": 0, " finance_type": "CASH", " contract_type": "Cash", " finance_partner": null, " finance_term_year": 0, " finance_rate": 0, " finance_escalator_rate": 0, " finance_ppw": 0, " finance_monthly_payment": 0,
" first_name": "Siva", " last_name": "Yerruboyina", " name": "Siva Yerruboyina", " email": " ysrk542@me.com", " phone": "+1 6692258597", " owner_email": " todd@aduhomesolutions.com", " documents": [ { " url": " https://stp-sales-tool.s3.us-west-2.amazonaws.com/projects/7834/attachment s/c2oqZ2Lw1141dYtLMlCH24ue2rz5GyAIAiNaBQeh.pdf", " label": "Design" }, { " url": " https://stp-sales-tool.s3.us-west-2.amazonaws.com/projects/7834/attachment s/LcA8UykYoIQ49EblfRNY0Mppaq5yPOlUYbsY2AgM.pdf"," label": "Design" } ],
" proposal_url": " https://app.subcontractorhub.com/public-proposal/49025d7c-ddef-40fd-b710-9 d92461693ee", " contract_signed_url": null, " system_size_kw": 2.96, " system_size_w": 2960 }Related ArticlesV2 API: Get Project Custom FieldsV2 API: Get Custom Fields With Values As Per ProjectCreate Customer APIV2 API: Update Custom
Fields of Project (Input of stages)
Key Points for Your Developer
Always include your API key in the request header
Test with a single record before running bulk operations
Log all API responses for troubleshooting
Pro Tips
💡 Start small: Test with one record before running bulk operations.
💡 Keep your API key safe: Never share it in emails or public repos.
💡 Log everything: Have your developer log responses for easy troubleshooting.
Troubleshooting
Problem | Solution |
Page won't load | Clear your browser cache and try again in Chrome or Edge |
Settings not saving | Make sure you have Admin access and click Save after each change |
Feature not visible | Check with your account manager to confirm your plan includes this feature |
Change Log
Date | Change |
2026-05-19 | Article rewritten for clarity and contractor-friendly tone |
Split Analysis: This article covers a single focused topic and does not require splitting into sub-articles.