Skip to main content

Examples

Practical curl and Python examples for every supported operation. Set the REPORISK_API_KEY environment variable to your key before running any example.

export REPORISK_API_KEY="rrk_live_AbCdEfGhIjKlMnOpQrStUvWxYz0123456789_abc"
export HOST="https://api.canirunthat.com"

List Repositories

curl

curl -s \
-H "Authorization: Bearer $REPORISK_API_KEY" \
"$HOST/api/v1/repos" | python3 -m json.tool

Python

import os
import requests

api_key = os.environ["REPORISK_API_KEY"]
host = os.environ["HOST"]

resp = requests.get(
f"{host}/api/v1/repos",
headers={"Authorization": f"Bearer {api_key}"},
)
resp.raise_for_status()

for repo in resp.json():
grade = repo.get("risk_grade") or "N/A"
print(f"[{repo['repo_id']}] {repo['url']} — grade={grade} complete={repo['is_complete']}")

Submit a Repository

curl

curl -s -X POST \
-H "Authorization: Bearer $REPORISK_API_KEY" \
-H "Content-Type: application/json" \
-d '{"url": "https://github.com/acme/my-repo", "branch": "main"}' \
"$HOST/api/v1/repos/analyze"

Python

import os
import requests

api_key = os.environ["REPORISK_API_KEY"]
host = os.environ["HOST"]

payload = {"url": "https://github.com/acme/my-repo", "branch": "main"}

resp = requests.post(
f"{host}/api/v1/repos/analyze",
headers={"Authorization": f"Bearer {api_key}"},
json=payload,
)
resp.raise_for_status()
data = resp.json()
print(f"Submitted: repo_id={data['repo_id']} status={data['status']}")

Poll Status Until Complete

GET /api/v1/repos/{repo_id}/status returns an is_complete boolean. Poll until it is true.

Python

import os
import time
import requests

api_key = os.environ["REPORISK_API_KEY"]
host = os.environ["HOST"]
repo_id = 42 # replace with your repo_id

headers = {"Authorization": f"Bearer {api_key}"}

while True:
resp = requests.get(f"{host}/api/v1/repos/{repo_id}/status", headers=headers)
resp.raise_for_status()
data = resp.json()
print(f"phase={data['phase']} progress={data['progress_percent']:.1f}%")
if data["is_complete"]:
print(f"Done! grade={data['risk_grade']} score={data['overall_risk_score']}")
break
if data.get("error_message"):
raise RuntimeError(f"Scan error: {data['error_message']}")
time.sleep(15)

Retrieve a Security Report

curl

REPO_ID=42
curl -s \
-H "Authorization: Bearer $REPORISK_API_KEY" \
"$HOST/api/v1/repos/$REPO_ID/report" | python3 -m json.tool

Python

import os
import requests

api_key = os.environ["REPORISK_API_KEY"]
host = os.environ["HOST"]
repo_id = 42

resp = requests.get(
f"{host}/api/v1/repos/{repo_id}/report",
headers={"Authorization": f"Bearer {api_key}"},
)
resp.raise_for_status()
report = resp.json()

print(f"Grade: {report['grade']} (score: {report['overall_score']})")
print(
f"Findings: {report['total_findings']} total — "
f"{report['critical_findings']} critical, "
f"{report['high_findings']} high, "
f"{report['medium_findings']} medium, "
f"{report['low_findings']} low"
)

List Scan History

curl

REPO_ID=42
curl -s \
-H "Authorization: Bearer $REPORISK_API_KEY" \
"$HOST/api/v1/repos/$REPO_ID/scans?limit=5" | python3 -m json.tool

Python

import os
import requests

api_key = os.environ["REPORISK_API_KEY"]
host = os.environ["HOST"]
repo_id = 42

resp = requests.get(
f"{host}/api/v1/repos/{repo_id}/scans",
headers={"Authorization": f"Bearer {api_key}"},
params={"limit": 5},
)
resp.raise_for_status()
data = resp.json()

print(f"Total scans: {data['total']}")
for scan in data["scans"]:
grade = scan.get("grade") or "N/A"
print(
f" #{scan['scan_number']} scan_run_id={scan['scan_run_id']} "
f"grade={grade} status={scan['status']}"
)

End-to-End: Submit and Wait for Report

Python

import os
import time
import requests

api_key = os.environ["REPORISK_API_KEY"]
host = os.environ["HOST"]
repo_url = "https://github.com/acme/my-repo"

headers = {"Authorization": f"Bearer {api_key}"}

# Submit
submit_resp = requests.post(
f"{host}/api/v1/repos/analyze",
headers=headers,
json={"url": repo_url, "branch": "main"},
)
submit_resp.raise_for_status()
repo_id = submit_resp.json()["repo_id"]
print(f"Submitted as repo_id={repo_id}")

# Poll until done
while True:
status_resp = requests.get(f"{host}/api/v1/repos/{repo_id}/status", headers=headers)
status_resp.raise_for_status()
data = status_resp.json()
print(f" phase={data['phase']} progress={data['progress_percent']:.1f}%")
if data["is_complete"]:
break
if data.get("error_message"):
raise RuntimeError(f"Scan error: {data['error_message']}")
time.sleep(15)

# Fetch report
report_resp = requests.get(f"{host}/api/v1/repos/{repo_id}/report", headers=headers)
report_resp.raise_for_status()
report = report_resp.json()

print(f"\nGrade: {report['grade']} (score: {report['overall_score']})")
print(f"Total findings: {report['total_findings']}")