Get Panel Availability
const url = 'https://example.com/api/canvas/example/panel-availability';const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url https://example.com/api/canvas/example/panel-availability \ --header 'Authorization: Bearer <token>'Return which data-gated right-sidebar tabs have data for deal_id.
RBAC: RequireViewer — identical to the three panels it gates
(comparables_trail / sponsor_patterns / conflict_provenance,
all RequireViewer). The booleans expose strictly less than the
panels themselves.
Response shape::
{"deal_id": "...",
"comparables_trail": true | false,
"sponsor_patterns": true | false,
"provenance": true | false}
Each field is an independent existence probe. Any probe that times
out / hits degraded DI / errors degrades to false (the tab stays
hidden — the safe default). Never raises a 5xx for “no data”.
Authorizations
Section titled “Authorizations ”Parameters
Section titled “ Parameters ”Path Parameters
Section titled “Path Parameters ”Responses
Section titled “ Responses ”Successful Response
Which data-gated right-sidebar tabs have data for deal_id.
Snake_case keys are part of the canvas-contract Python↔TS parity
invariant — they mirror PanelAvailabilityResponse in
canvas-ui/src/api/canvasApi/panelAvailability.ts field-for-field.
Do NOT camelCase.
object
Example generated
{ "deal_id": "example", "comparables_trail": true, "sponsor_patterns": true, "provenance": true}Validation Error
object
object
object
Example generated
{ "detail": [ { "loc": [ "example" ], "msg": "example", "type": "example", "input": "example", "ctx": {} } ]}