Skip to content

Get the report & PDF

For a complete job, print the verdict, the score, a one-line summary and the result of each quality area, then save the PDF report. The PDF is the document you'd share with a colleague or customer.

get_report.py

# get_report.py - fetch the report and save the PDF
#   usage: python get_report.py <job id>
import os
import sys
from centific import PhysicalAI

client = PhysicalAI(
    api_key  = os.environ["CENTIFIC_API_KEY"],
    base_url = "https://humanoidiq-dev.centific.com",
)

job = client.qc.get(sys.argv[1])
if job.status != "complete":
    sys.exit(f"Not ready - the job is '{job.status}'. Reports exist once it is 'complete'.")

report = job.report()
print("verdict :", report.verdict)        # PASS or FAIL
print("score   :", report.score)          # out of 100
print("summary :", report.headline)
for area in report.areas:
    if area["assessed"]:
        print(f"  {area['label']:<16} {area['fail']} failed")

pdf = job.save_pdf(f"{job.id}.pdf")
print("PDF saved:", pdf)

How to use it

python get_report.py qcjob_yLrQuj9XZ2LxIBbVN6f8S2

The PDF is saved in the folder you ran it from, named after the job id.

Sample output

Illustrative: the summary, score and areas depend on your data.

verdict : PASS
score   : 87
summary : Your capture passed - 1 small issue to look at.
  Video quality    0 failed
  Framing          0 failed
  Hand tracking    1 failed
  Movement         0 failed
  Task completion  0 failed
PDF saved: qcjob_yLrQuj9XZ2LxIBbVN6f8S2.pdf
Not ready - the job is 'grading'. Reports exist once it is 'complete'.

Everything in the report

Each field is available as report.<field>:

Field Meaning
verdict PASS or FAIL (the same outcome the job shows as VERIFIED / REJECTED)
score 0–100
projected What the score would be if you applied the suggested fixes
headline A one-sentence summary
checks How many checks ran and passed
areas Each quality area (video quality, framing, tracking, movement, task completion) with its checks and fail count
fix What to change, most important first (empty if nothing needs fixing)
specs What we measured about the video: duration, frame rate, codec, size
summary / episodes For multi-episode zips: the totals, and one row per episode
expires_at When the report is deleted (30 days after it was produced)

See everything at once

Add print(report.to_dict()) to the script.

Save your PDF within 30 days

After that the report is deleted. The job still shows complete, but the report can no longer be fetched.