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.
The sidebar
Section titled “The sidebar”| 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.
API → Settings
Section titled “API → Settings”- 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
curlline.
API → Playground
Section titled “API → Playground”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.
Checking what your integration produced
Section titled “Checking what your integration produced”In the Playground
Section titled “In the Playground”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.
In the browser
Section titled “In the browser”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.
From the command line
Section titled “From the command line”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:
curl -s -H "X-API-Key: $KEY" -H "X-Namespace: $NS" \ $BASE/orgs/$ORG_ID/everythingA flat, denormalized view across every organization — each row carries its indicator, outcome, themes, and org, so missing links show up without any join logic:
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:
curl -s -H "X-API-Key: $KEY" -H "X-Namespace: $NS" $BASE/rows/themescurl -s -H "X-API-Key: $KEY" -H "X-Namespace: $NS" $BASE/rows/fundsExport and diff. Identifiers come back exactly as you sent them — if something is missing, it either failed validation or was never submitted:
curl -s -H "X-API-Key: $KEY" -H "X-Namespace: $NS" \ "$BASE/export?format=jsonld" > namespace-export.jsonldLoading a capsule from the console
Section titled “Loading a capsule from the console”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.
Where next
Section titled “Where next”- Quickstart — from API key to first query.
- Working with capsules — validation rules and rollback.
- Querying impact data — the full filter reference.
- API reference — every endpoint and the error contract.
