GET https://solarproof.com.au/apidata.php?action=getjobsheet

Description

Returns the latest published version of a project document. Job sheets are published from the project's Documents panel and are versioned per project, so this endpoint always resolves to the most recent version that has not been deleted.

Call it in two modes. The default (format=json) returns metadata - filename, version, size and publish date - and, where document storage is running on S3, a direct_url that is valid for one hour and can be handed straight to another system. Calling it with format=pdf streams the PDF bytes in the response body, which is the reliable option for any environment.

Project-scoped: The project must belong to your company. Requests for another company's project return 403.
Not published yet? A project whose job sheet has never been published returns 404 with available: false. Poll or retry rather than treating it as an error - the document appears as soon as someone publishes it.

Request Parameters

Query Parameters

Parameter Type Required Description
api_key string Required Your Solar Proof API key
action string Required Must be getjobsheet
project_id integer Required The Solar Proof project (quote) ID
doc_type string Optional Which document to fetch. Defaults to jobsheet. Also accepts sitereport, stringingreport, usermanual and proposal.
format string Optional json (default) returns metadata. pdf streams the file with Content-Type: application/pdf.

The Response Object

Field Type Description
project_id integer The project the document belongs to
doc_type string The document type that was resolved
available boolean true when a published version exists
document_name string Display / download filename
version integer Version number, incrementing per project and document type
filesize integer Size in bytes
published_at string When this version was published (YYYY-MM-DD HH:MM:SS)
direct_url string Expiring link to the file, valid for one hour. null when document storage is on the local filesystem rather than S3 - use format=pdf instead.

Example Response

Response Body JSON
{
  "status": 200,
  "project_id": 2143,
  "doc_type": "jobsheet",
  "available": true,
  "document_name": "jobsheet_v3_20260713101500.pdf",
  "version": 3,
  "filesize": 486213,
  "published_at": "2026-07-13 10:15:00",
  "mime_type": "application/pdf",
  "direct_url": "https://s3.ap-southeast-2.amazonaws.com/..."
}
Not Published Yet JSON
{
  "status": 404,
  "project_id": 2143,
  "doc_type": "jobsheet",
  "available": false,
  "Message": "No published document of that type for this project."
}

Error Responses

Status Meaning
401 Missing or invalid api_key
403 The project does not belong to your company
404 No published document of that type, or the stored file could not be read
422 Missing project_id

Example Requests

Metadata cURL
curl -X GET "https://solarproof.com.au/apidata.php?action=getjobsheet&project_id=2143&api_key=YOUR_API_KEY"
Download the PDF cURL
curl -X GET "https://solarproof.com.au/apidata.php?action=getjobsheet&project_id=2143&format=pdf&api_key=YOUR_API_KEY" \
     -o jobsheet-2143.pdf
Site report instead of the job sheet cURL
curl -X GET "https://solarproof.com.au/apidata.php?action=getjobsheet&project_id=2143&doc_type=sitereport&api_key=YOUR_API_KEY"
Fetch and forward to another system Python
import requests

API_KEY = "YOUR_API_KEY"
BASE    = "https://solarproof.com.au/apidata.php"

meta = requests.get(BASE, params={
    "action": "getjobsheet",
    "project_id": 2143,
    "api_key": API_KEY,
}).json()

if meta.get("available"):
    pdf = requests.get(BASE, params={
        "action": "getjobsheet",
        "project_id": 2143,
        "format": "pdf",
        "api_key": API_KEY,
    }).content
    with open(meta["document_name"], "wb") as f:
        f.write(pdf)

Common Use Cases

  • Attach the job sheet to a job in a field service platform once a deal is won.
  • File the job sheet against the deal or contact record in your CRM.
  • Archive published documents to your own document management system.
  • Check version on a schedule and re-fetch only when it increments.

Related Endpoints

Related Webhook Events

contract_signed

Fires when a proposal is signed - the usual trigger for fetching the job sheet