import requests import json TOKEN = "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6Ik1EUTRNRU5GUTBVNU9FUXpOelk1TVRFME0wUkdOMFpFUkRoR1JVVkJNVGMxT1RFNFJERXlPQSJ9.eyJodHRwOi8vZW1haWwiOiJzZWJhc3RpYW5Ab3Ntb3Npcy1hY2QuY29tIiwiaHR0cDovL2NsdWsudG9rZW4vbGFzdFBhc3N3b3JkQ2hhbmdlIjoiMjAyNS0wOC0yNlQwOTo1NDoyNi4zMjZaIiwiaHR0cDovL2NsdWsudG9rZW4vY29ubmVjdGlvbiI6ImVUZWNoSUQiLCJodHRwOi8vY2x1ay50b2tlbi9zdHJhdGVneSI6ImF1dGgwIiwiaHR0cDovL2NsdWsudG9rZW4vc3RyYXRlZ3lUeXBlIjoiZGF0YWJhc2UiLCJpc3MiOiJodHRwczovL2V0ZWNoaWQuZXUuYXV0aDAuY29tLyIsInN1YiI6ImF1dGgwfDY4YWQ4NDUyZDI2YzI1ZmMyMzkwZmYxYSIsImF1ZCI6WyJodHRwczovL3Bhc2h1Yi5hcGkuZXRlY2gubmV0IiwiaHR0cHM6Ly9ldGVjaGlkLmV1LmF1dGgwLmNvbS91c2VyaW5mbyJdLCJpYXQiOjE3NzQyODczOTMsImV4cCI6MTc3NDI5NDU5Mywic2NvcGUiOiJvcGVuaWQiLCJhenAiOiJEaVp6d3VVaTVkVmozOXR3NG00bWZ6emZvRm5MdmVLZyJ9.NHh21XfnRofsFkRkc-28Dz-vQAdY70lXkEmh-Mzz7Fg6gjDbZeMu7PnBwgbDP_U8r6R0mI_pDIUc1MzJe1Rf5SF2-RV36TcGzmVzb3ek9wPsy3lxST5WL-vn-qUJ7GsZiGOeQ-jDLLFn8b8tjFrD7BGv8uphrfYAbPDm0atznkdbUSQQy-rfRJWhisnDtHf99j96TuJz3dV4bfI6VGrin-jezbg6BCvUYWQtttUs7knQKEWO0sGGDxtS29sbn4MX8Jqz4-hf6N2XSlgv52aIDwTVX-lyMWzfoeuIGhvCKuDiJeVw2c0r2UZFpHqjnfhXcb0_aacukXe8z-srj8-Rdw" base = "https://pashub.net/api" headers = {"Authorization": f"Bearer {TOKEN}", "Accept": "application/json"} company_id = "cb5249e2-8f31-4ef4-aefd-08ddaccb1fa2" # 1️⃣ get jobs params = { "pageIndex": 0, "pageSize": 20, "orderBy": "createdUtc", "orderDesc": "true", "addressUprn": "100061885568", "companyId": company_id, } r = requests.get(f"{base}/jobs", headers=headers, params=params) payload = r.json() property_id = payload["results"][0]["id"] print("JOB:", property_id) # 2️⃣ get evidence list r = requests.get(f"{base}/jobs/{property_id}/evidence", headers=headers) print(r.status_code) evidence = r.json() print(evidence) # 3️⃣ get evidence metadata if evidence: evidence_id = evidence["results"][0]["fileId"] meta_url = f"https://pashub.net/api/jobs/{property_id}/evidenceMetadata" meta_params = {"evidenceIds": evidence_id} r = requests.get(meta_url, headers=headers, params=meta_params) r.raise_for_status() meta = r.json() container = meta["containerName"] blob_uri = meta["blobUri"] file = meta["files"][0] file_id = file["fileId"] file_name = file["fileName"] base, sas = blob_uri.split("?", 1) download_url = f"{base}{container}/{file_id}?{sas}" print("Download URL:", download_url) pdf = requests.get(download_url) pdf.raise_for_status() with open(file_name, "wb") as f: f.write(pdf.content) print("Saved:", file_name)