Skip to content

Console

Lab 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 everyone else and for the people behind those integrations: it is where capsules are built, sent, and received, where CIDS data is opened and inspected in the browser, and where namespaces and keys are managed and endpoints tried without writing code.

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

The Start page asks who you are before you register. The role is stored on your account, shown under Settings → I use Lab as, and can be changed there at any time. It decides what the console shows; it is not a security boundary, and the API never reads it.

Role Who What the console shows
Report sender Charities, nonprofits, and purpose-driven businesses The sender view: My capsules and Help. Build a capsule, keep it, submit it to funders, and hear back.
Report receiver Funders, grantmakers, investors, and finance intermediaries The full console: the capsules sent to you under Received, plus the browser-side pages for exploring, analyzing, and visualizing.
Developer Teams building on the Lab API The full console plus the API item: namespaces, keys, and the Playground.

Accounts created before roles existed read as receivers. If you registered as a receiver and need the API, switch to Developer under Settings.

A sender’s sidebar has two items. My capsules lists everything they have built, where each one has gone, and what came back. Help is the in-app walkthrough. Building a capsule is switched on account by account while Lab is in beta.

  1. Build. From the filled-in Common Approach reporting template (an Excel workbook) or, as early access, a PDF report. The file is read in the browser, the sender is asked for the web address their organization’s records are named under, and the result is saved as a capsule. Nothing from the source file is kept except the capsule.
  2. Check. The capsule page shows what a funder will see — the organization and its profiles, then outcomes grouped by SDG with one column per year — and lists anything that could not be read cleanly. Edit changes a value or a detail and saves a new version; earlier versions are never rewritten underneath a funder.
  3. Send. Pick a funder and Submit. Only funders Common Approach has linked to the organization appear in the list.
  4. Feedback. A thread beside the capsule carries the funder’s questions, comments pinned to specific rows, and a verdict: changes requested or accepted. After saving a new version, Resubmit continues the same thread.

Capsules are stored in Canada. A funder only ever sees the versions that were submitted to them, and Download gives the sender the same JSON-LD file Lab holds.

Receivers and developers get the full console. The items follow the order of the work:

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.
Received The capsules organizations have submitted to you, one row per organization, with status and when it last moved. Open one to see the same view the sender sees, the thread, and the verdict buttons.
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.
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.
Analysis The loaded capsules read one layer of the theory of change at a time: summary, organizations, themes, outcomes, indicators.
Common Framework Early access. Build an aggregation methodology — themes, headline indicators, mappings, harmonization — and apply it to the workspace for a reporting period, with published versions and a change log.
My charts Query results and Analysis charts you saved, refreshable against the current workspace.
Code Lists The Common Approach code lists (SDGs, IRIS+, sectors, provinces, units, …) toggled in and out of the workspace.
API Developers only. The integration side: the Playground and Settings tabs described below.
Help The in-app guide to the browser-side pages.

Everything except 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.

The capsules a console account holds — a sender’s builds, a receiver’s library, the submissions between them — are files, not graphs. On the API they live in one reserved namespace per tenant, X-Namespace: ~explorer (shown as “Explorer” in the console). Files there are listable, downloadable, and explorable in the browser, and nothing more: they are never ingested, so every graph endpoint refuses that namespace with a 400. The two sides meet only through the two bridges on the Workspace page, described below.

  • Account — your name, address, and role (I use Lab as).
  • Tenant — your organization’s name, tenant ID, region, 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.

Settings is reachable from the profile menu (top right) for every role; the Playground and the API sidebar item are for developers and staff.

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/organizations One row per organization
GET /rows/outcomes One row per outcome with its themes and organization; org filter
GET /rows/indicators One row per indicator with unit, outcome, and organization; org filter
GET /rows/funding-statuses One row per sff:FundingStatus: funder, state, organization; org filter
GET /rows/{table}/export The whole table as one versioned file — a download URL, 304 when unchanged, 202 while rebuilding
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 A download URL for 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. The export endpoint answers with a short-lived download URL rather than the document itself. 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" | jq -r .url | xargs curl -s \
> 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, to load a capsule an organization submitted to you, or to try a hand-edited capsule against the API.