Skip to content

Console

Graph Cast has two sides. The API at api.cast.commonapproach.org is what integrations call with an API key. The console at app.cast.commonapproach.org is the signed-in web app for the people behind those integrations: it is where namespaces and keys are managed, where endpoints can be tried without writing code, and where CIDS data can be opened and inspected in the browser.

The console authenticates with your Common Approach account. It never holds an API key — keys are minted there for integrations only.

Item What it is for
Workspace Your library of CIDS capsules and the subset currently loaded for exploring. Drop in JSON-LD files, a filled-in Social Finance Fund reporting workbook (.xlsx), or sample data.
Explore Ask questions in plain language (AI writes and runs the SPARQL and explains the answer), or write SPARQL yourself in the editor, with a library of ready-made queries and your history.
Analysis The loaded capsules read one layer of the theory of change at a time: summary, organizations, themes, outcomes, indicators.
My charts Query results and Analysis charts you saved, refreshable against the current workspace.
Records The loaded capsules as tables, one per CIDS class, with CSV export.
Graph The same data drawn as a graph; click a node to browse the entity.
Code Lists The Common Approach code lists (SDGs, IRIS+, sectors, provinces, units, …) toggled in and out of the workspace.
API The integration side: the Playground and Settings tabs described below.
Help The in-app guide to the browser-side pages.

Everything above API is the CIDS Data Explorer, integrated into the console. It works in the browser on capsules saved to your account and never writes to a graph namespace. Data enters a namespace only through the API — from your integration, or from the console’s explicit Copy to API namespace action.

  • Tenant — your organization’s name, tenant ID, and status. Every key you mint belongs to this tenant.
  • API keys — mint a key with a label and, optionally, a restriction to specific namespaces. Revoke keys here too.
  • Namespaces — list, create, and delete namespaces. Slugs are lowercase letters, digits, and hyphens. Deleting a namespace drops all of its data irreversibly; the console asks you to type the name to confirm.
  • Connection — the API base URL, the two required headers, and a ready-to-copy curl line.

The Playground runs read endpoints against a namespace as your signed-in account — nothing to paste — and shows the JSON response with status and timing. Pick a namespace and an endpoint, fill in any filters, and press Run. Each request also shows the equivalent curl command with a placeholder for the API key, and a copy curl button.

Endpoint Shows
GET /rows/indicator-reports Denormalized report rows, with theme, fund, org, period[from], period[to], and limit filters
GET /rows/themes Theme facet with report counts and meta.unthemed_reports
GET /rows/funds Fund facet with organization and report counts
GET /orgs Every organization in the namespace
GET /orgs/{org_id}/everything One organization’s theory of change as a nested tree
GET /capsules Every capsule ingested into the namespace, with status
GET /capsules/{capsule_id} One capsule’s status and plain-language validation report
GET /export The whole namespace as CIDS JSON-LD

Write endpoints — POST /capsules, entity creates, deletes — are not in the Playground. Use curl or your integration for those, or the API’s own interactive OpenAPI documentation at /docs, which runs any endpoint with an API key.

GET /capsules shows whether each capsule your integration pushed was accepted or rejected, and GET /capsules/{capsule_id} gives the validation report for a rejected one. GET /rows/indicator-reports shows the resulting rows — a report with no outcome or empty themes stands out immediately — and GET /rows/themes counts the reports no theme filter can reach in meta.unthemed_reports.

On the Workspace page, Import from an API namespace (at the bottom) lists the capsules in a namespace and copies the original file into your library. From there it opens like any other capsule: as tables in Records, one layer at a time in Analysis, visually in Graph, or by query in Explore. The import is a copy; nothing in the namespace changes.

The same checks with curl, for scripting or CI. Set BASE, KEY, and NS as in the Quickstart.

One organization’s full theory of change, with outcomes, indicators, and reports nested inline:

Terminal window
curl -s -H "X-API-Key: $KEY" -H "X-Namespace: $NS" \
$BASE/orgs/$ORG_ID/everything

A flat, denormalized view across every organization — each row carries its indicator, outcome, themes, and org, so missing links show up without any join logic:

Terminal window
curl -s -H "X-API-Key: $KEY" -H "X-Namespace: $NS" \
"$BASE/rows/indicator-reports?limit=100"

What is filterable. unthemed_reports in the themes response counts reports no theme filter can reach — if it is high, some indicators are not linked to outcomes with themes:

Terminal window
curl -s -H "X-API-Key: $KEY" -H "X-Namespace: $NS" $BASE/rows/themes
curl -s -H "X-API-Key: $KEY" -H "X-Namespace: $NS" $BASE/rows/funds

Export and diff. Identifiers come back exactly as you sent them — if something is missing, it either failed validation or was never submitted:

Terminal window
curl -s -H "X-API-Key: $KEY" -H "X-Namespace: $NS" \
"$BASE/export?format=jsonld" > namespace-export.jsonld

The bridge also runs the other way. On the Workspace page, open a saved capsule’s row menu and choose Copy to API namespace, then pick the namespace. A copy is validated and ingested exactly as if your integration had posted it to POST /capsules; poll its status in the Playground with GET /capsules. This is a quick way to seed a namespace before an integration exists, or to try a hand-edited capsule against the API.