Quickstart
1. Get a key
Sign in at app.kolamlabs.ai. On the account page, create a key.
- Test keys (
rk_test_…) are free. They run no check and return realistic sample verdicts, so you can build your integration before you spend anything. - Live keys (
rk_live_…) run real checks, paid from your account's prepaid credit.
Keys are shown once, so store them as secrets. You can give each key a monthly spend cap.
2. Check a take
Send the clip and, optionally, photos of each character as reference[NAME]. Repeat the field for several photos or several characters.
curl "https://api.kolamlabs.ai/v1/checks?wait=60" \
-H "Authorization: Bearer $RACCORD_API_KEY" \
-F clip=@take.mp4 \
-F "reference[Maya]=@maya_front.jpg" \
-F "reference[Maya]=@maya_side.jpg"
?wait=60 holds the request until the verdict is ready (up to 60 seconds). Without it, a live check returns 202 straight away with state: "queued"; poll GET /v1/checks/{id} or use a webhook. Test checks always finish at once with 200.
3. Read the answer
{
"id": "chk_6f1c…",
"state": "done",
"verdict": "fail",
"headline": "Don't use this take: 1 problem found.",
"cost": {"usd": 0.04, "display": "$0.04"},
"result": {
"findings": [{
"check": "identity",
"severity": "fail",
"title": "Maya's face changes from 0:02.5 to the end of the take and no longer matches the reference.",
"fix": "Re-render this take with a different seed and Maya's reference images attached.",
"start": 2.5, "end": 4.0, "confidence": 0.92
}]
},
"report_url": "/v1/checks/chk_6f1c…/report"
}
verdictispass,failorunsure.- Each finding's
titlesays what's wrong,fixsays what to do, andstart/endsay when, in seconds. report_urlis an HTML report with the frames as evidence. It's a path on the API, fetched with your key like any other call; on the review screen it opens without one. Test checks have no report (null).
The full shape is on Reading a verdict.
4. In Python
pip install raccord-sdk
from raccord_sdk import Raccord
raccord = Raccord() # reads RACCORD_API_KEY
take = raccord.check("take.mp4", references={"Maya": ["refs/maya/"]}) # folders work too
if take.passed:
publish("take.mp4")
else:
for f in take.findings:
print(f["title"], "→", f["fix"])
Every SDK call retries safely: it sends an Idempotency-Key, so a network retry never charges twice.
Test mode
With a test key, the file name chooses the sample, like test card numbers:
| File name contains | Verdict |
|---|---|
fail |
fail, with real findings from a sample take |
unsure |
not sure |
| anything else | pass |
With references sent, the failing sample is an identity failure named for your first character, so you can build identity handling against a test key. Pre-flight fails when the prompt contains "fail". Test checks cost nothing and are marked "test": true in the signed record. Samples are real engine output on sample clips; only clip.sha256 is your file's.