/api/v1/proof/capture-sessionsCreate a hosted photo request.
ROYKANDEVELOPERS
Create one asset-specific capture session, send the returned hosted link, and retrieve a stable evidence decision. Production access is issued to approved design partners.
Use a server-side API key. The response includes a short-lived hosted capture URL and a stable session ID. Send the URL through your existing resident communication workflow.
curl https://roykan.com/api/v1/proof/capture-sessions \
-H "Authorization: Bearer $ROYKAN_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"external_id": "check_2026_1042",
"property_reference": "prop_83K2",
"unit_reference": "unit_14B",
"asset_type": "under_sink_plumbing",
"expires_in_hours": 72
}'Never place a production key in a browser, resident link, mobile bundle, or public repository.
Production endpoints require Authorization: Bearer rk_live_…. Roykan stores configured key hashes rather than requiring resident credentials. Sandbox calls do not need a key.
under_sink_plumbingSupply lines, valves, drain, cabinet basetoilet_supply_and_baseShutoff, supply line, tank connection, basewasher_connectionsHot/cold connections, hoses, drain, floorwater_heater_baseLower unit, pan, visible valves, floorhvac_condensate_areaVisible line, drain or pan, surrounding floor/api/v1/proof/capture-sessionsCreate a hosted photo request.
/api/v1/proof/capture-sessions/:idRetrieve session state and latest review.
/api/v1/proof/capture-sessions/:idUpload a photo server-to-server using multipart field photo.
/api/v1/proof/capture-sessions/:idDelete the session, review records, and stored evidence.
/api/v1/proof/sandboxReturn a synthetic decision with no key or photo.
visible_issue_detectedA concrete visible condition is present. Route to manager review.
no_visible_issue_detectedUsable view; no listed issue is apparent. This is not a safety declaration.
insufficient_evidenceAsk for another photo because the evidence is not reviewable.
human_review_requiredEvidence is ambiguous or automated review is unavailable.
{
"status": "complete",
"latest_verification": {
"decision": "visible_issue_detected",
"capture_quality": "usable",
"asset_match": true,
"confidence": 0.91,
"findings": [{
"category": "water",
"severity": "prompt_review",
"observation": "Dark discoloration is visible below the drain connection."
}],
"suggested_next_step": "Have a property manager review the evidence."
}
}Non-2xx responses use {"error":{"code":"…","message":"…"}}. Common codes include authentication_required, invalid_api_key, invalid_asset_type, session_expired, attempt_limit_reached, and service_not_configured.
Send internal property and unit IDs—not resident names, emails, lease text, or full addresses. Hosted capture asks for one focused asset photo and a submission confirmation. Your production agreement sets retention and review responsibilities.
Do not use a Roykan result by itself to charge a resident, assign fault, issue a legal notice, bypass emergency procedures, or replace professional inspection.
Choose an asset and a synthetic scenario. The sandbox helps your team map statuses before production credentials or resident evidence are involved.
Synthetic data only. This sandbox does not upload or analyze a photo.
Select a scenario and run the synthetic response.