import os
import time
from pathlib import Path
import requests
API_BASE = "https://api.lendpathway.com/api"
TOKEN = os.environ["PATHWAY_API_TOKEN"]
session = requests.Session()
session.headers["Authorization"] = f"Bearer {TOKEN}"
def submit_book(paths: list[Path], name: str) -> str:
opened = [path.open("rb") for path in paths]
try:
response = session.post(
f"{API_BASE}/submit-book",
files=[
("files", (path.name, handle, "application/pdf"))
for path, handle in zip(paths, opened)
],
data={"book_name": name},
timeout=120,
)
response.raise_for_status()
return response.json()["book_id"]
finally:
for handle in opened:
handle.close()
def wait_for_book(book_id: str, timeout: float = 900) -> dict:
deadline = time.monotonic() + timeout
while time.monotonic() < deadline:
response = session.get(f"{API_BASE}/books/{book_id}", timeout=30)
response.raise_for_status()
book = response.json()
print(book["parse_status"], book.get("parse_status_message") or "")
if book["parse_status"] == "completed":
return book
if book["parse_status"] in {"failed", "cancelled"}:
raise RuntimeError(book.get("parse_status_message") or book["parse_status"])
time.sleep(5)
raise TimeoutError("Pathway parse timed out")
book_id = submit_book(
[Path("jan.pdf"), Path("feb.pdf"), Path("application.pdf")],
"Smith Auto Body",
)
wait_for_book(book_id)
response = session.get(f"{API_BASE}/books/{book_id}/analytics", timeout=60)
response.raise_for_status()
analytics = response.json()
print({
"book_id": book_id,
"true_revenue": analytics["true_revenue"],
"average_daily_balance": analytics["average_daily_balance"],
"debt_to_income_ratio": analytics["debt_to_income_ratio"],
"positions": len(analytics["positions"]),
})