Why the API matters more than the UI
The graph UI is for humans. The API is for agents and pipelines: an agent fixing repo A needs to know what depends on A before it starts so the change can stay green. That’s a tool call, not a tab.Recommended call pattern
For an agent in a working tree atgithub.com/myorg/repo:
1
Resolve the local clone URL to a Riftmap repo
.git suffix variants. Returns 404 on miss, 409 on ambiguous match. Provide exactly one of url or full_path.2
Hydrate context in one round-trip
{ repository, dependencies (capped 100, with dependencies_total), dependents (capped 100, with dependents_total), artifacts, ownership }. Composes the dependency endpoints into one call. The ownership block is a slim { bus_factor, top_author_name, human_author_count } summary (null until the org is scanned with the ownership signal enabled). Impact is deliberately omitted — call /impact separately when blast radius is actually needed.3
Drill in as needed
- More than 100 dependents?
GET /repositories/{id}/dependents?limit=500&offset=0 - Transitive blast radius?
GET /repositories/{id}/impact?max_depth=3 - Who maintains this — is it a single-maintainer risk?
GET /repositories/{id}/ownershipfor the full contributor list, orGET /connected-orgs/{org_id}/ownership-riskfor the org-wide ranked findings feed. - Neighbourhood graph for visualisation?
GET /connected-orgs/{org_id}/graph?root={id}&depth=2
4
Decide trust
If
last_activity_at > last_scanned_at, the data is stale. The agent can warn the user, fall back to a simpler analysis, or trigger a rescan and retry.The freshness rule
Every repo response carries four freshness fields:
For a CI gate, “stale” usually means “trigger a rescan and re‑poll”. For an interactive agent, “stale” usually means “warn the user, then proceed with the caveat surfaced in the response”.
archived: true is also a strong signal — archived repos are a frequent source of phantom edges in older graphs.
Pagination contract
All list endpoints (dependencies, dependents, repositories, artifacts, scans, members) follow the same shape:
Response header
X-Total-Count carries the total matching rows so the client can compute page counts in one round‑trip. Out‑of‑range values return 422.
Auth
Workspace API keys (X-API-Key: rfm_live_… or Authorization: Bearer rfm_live_…). Keys are workspace‑scoped — the agent never needs to pass a workspace_id. See Authentication for the full matrix and rate limits.
Static OpenAPI schema
Live/openapi.json and /docs stay disabled in production — they would otherwise hand attackers a complete endpoint inventory plus validation rules. The schema is generated in CI from the dev‑mode app and shipped with the frontend build at a stable static URL:
The full surface
The full schema with request/response shapes, query params, and error codes is at API Reference.
