{"openapi":"3.1.0","info":{"title":"Essentia Dashboards API","version":"1.0.0","summary":"Publish and edit JSON-defined dashboards.","description":"A dashboard is one JSON document. This service stores it, renders it with a shared\nblock library, and exports it as a PDF — there is no per-dashboard code and nothing\nto deploy when one changes.\n\nReads are open. Writes need the API key, as `Authorization: Bearer <key>` or\n`X-API-Key: <key>`. A deployment with no key configured accepts writes from anyone,\nwhich is the right default on a laptop and the wrong one anywhere else.\n\nTo change a published dashboard, prefer `POST /api/dashboards/{slug}/edit` over\nre-posting the whole document. These specs run to tens of kilobytes, and a model\nreproducing one from memory drops table rows and rounds figures.\n\nHuman documentation lives at `/docs`, and every block is rendered live with its\nJSON at `/blocks`."},"servers":[{"url":"https://dev-essentia-dashboards-7c9bf9907e8a01b4.apps.essentia.kortix.cloud","description":"This deployment."}],"tags":[{"name":"Dashboards","description":"Read, publish, replace, delete."},{"name":"Editing","description":"Change part of a dashboard without re-sending it."},{"name":"Sources","description":"Publish from a URL and re-pull it later."},{"name":"Sharing","description":"Who may open a dashboard, when the deployment identifies its viewers."},{"name":"Contract","description":"The machine-readable descriptions of this API."}],"paths":{"/api/dashboards":{"get":{"tags":["Dashboards"],"operationId":"listDashboards","security":[],"summary":"Every dashboard, as index summaries","description":"Summaries, not documents — the blocks are omitted. Ordered by `order`, then title, with unordered dashboards last.","responses":{"200":{"description":"The full list.","content":{"application/json":{"schema":{"type":"object","properties":{"dashboards":{"type":"array","items":{"$ref":"#/components/schemas/DashboardSummary"}}},"required":["dashboards"]}}}}}},"post":{"tags":["Dashboards"],"operationId":"publishDashboard","summary":"Publish or replace a dashboard","description":"The `slug` in the body decides whether this creates or replaces. Upsert rather than\ncreate-then-update, so a weekly run never has to ask whether last week already happened.\n\nReplace means replace: a field the new document omits is gone, not inherited. `createdAt`\nsurvives, so \"first published\" stays true.","security":[{"bearerAuth":[]},{"apiKeyAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardSpec"},"examples":{"minimal":{"summary":"The smallest valid dashboard","value":{"slug":"hello","title":"Hello","sections":[{"blocks":[{"type":"bignumber","value":42,"label":"Answers"}]}]}}}}}},"responses":{"201":{"description":"Published.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublishResult"}}}},"400":{"description":"The body was not JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"422":{"$ref":"#/components/responses/ValidationFailed"}}}},"/api/dashboards/{slug}":{"parameters":[{"name":"slug","in":"path","required":true,"description":"The dashboard's identity, its URL and its primary key.","schema":{"$ref":"#/components/schemas/Slug"}}],"get":{"tags":["Dashboards"],"operationId":"getDashboard","security":[],"summary":"One dashboard, in full","description":"Returns the document plus `createdAt`, `updatedAt` and `sourceUrl`.\n\nThose three are the store's, not the spec's, and the spec schema rejects unknown keys —\nso posting a fetched document straight back fails validation. Strip them first. This is the\nmost common way a round trip breaks.","responses":{"200":{"description":"The document.","content":{"application/json":{"schema":{"type":"object","properties":{"dashboard":{"$ref":"#/components/schemas/StoredDashboard"}},"required":["dashboard"]}}}},"404":{"$ref":"#/components/responses/NotFound"}}},"put":{"tags":["Dashboards"],"operationId":"replaceDashboard","summary":"Replace, addressing the slug in the URL","description":"Identical to the collection POST except that the slug comes from the path. A body that names a different slug is a mistake worth reporting rather than resolving silently in either direction; a body that omits it inherits the path.","security":[{"bearerAuth":[]},{"apiKeyAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardSpec"}}}},"responses":{"200":{"description":"Replaced.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublishResult"}}}},"400":{"description":"The body was not JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"409":{"description":"The URL slug and the body slug disagree.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"$ref":"#/components/responses/ValidationFailed"}}},"delete":{"tags":["Dashboards"],"operationId":"deleteDashboard","summary":"Remove a dashboard","security":[{"bearerAuth":[]},{"apiKeyAuth":[]}],"responses":{"200":{"description":"Deleted.","content":{"application/json":{"schema":{"type":"object","properties":{"deleted":{"type":"boolean","const":true}},"required":["deleted"]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/api/dashboards/{slug}/edit":{"parameters":[{"name":"slug","in":"path","required":true,"description":"The dashboard's identity, its URL and its primary key.","schema":{"$ref":"#/components/schemas/Slug"}}],"post":{"tags":["Editing"],"operationId":"editDashboard","summary":"Change part of a dashboard","description":"Operations run in order against the document as the previous one left it, so indexes\nshift within a single request. Address by `blockId`/`sectionId` where the spec provides\nthem: an id survives an insert above it and an index does not.\n\nNothing half-applies. The whole document is re-validated after the ops run, and if the\nresult would be invalid the stored dashboard is untouched.\n\nMaximum 200 operations per request.","security":[{"bearerAuth":[]},{"apiKeyAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"ops":{"type":"array","minItems":1,"maxItems":200,"items":{"$ref":"#/components/schemas/EditOp"}}},"required":["ops"]},"examples":{"typical":{"summary":"Re-score a dashboard without re-sending it","value":{"ops":[{"op":"merge","value":{"tone":"danger"}},{"op":"setBlock","blockId":"score-banner","value":{"type":"banner","id":"score-banner","tone":"danger","headline":"SCORE: RED — AT RISK"}},{"op":"replaceText","find":"16 days open","replace":"17 days open"}]}}}}}},"responses":{"200":{"description":"Applied, with the updated document.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EditResult"}}}},"400":{"description":"The body was not JSON, an operation is malformed, or an address does not resolve. The response carries the operation list.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"issues":{"type":"array","items":{"type":"string"}},"operations":{"type":"array","items":{"type":"string"}}},"required":["error"]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"description":"The operations would leave the dashboard invalid, so nothing was changed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}}}}},"/api/dashboards/{slug}/access":{"parameters":[{"name":"slug","in":"path","required":true,"description":"The dashboard's identity, its URL and its primary key.","schema":{"$ref":"#/components/schemas/Slug"}}],"get":{"tags":["Sharing"],"operationId":"getDashboardAccess","summary":"Who may open this dashboard","description":"The visibility, the owner, and the allow-list.\n\nThis is the one GET in the API that is NOT open. It answers with a roster of people,\nand a viewer who may open a dashboard has no business with the list of everyone else\nwho may — so it takes the API key, or ownership, exactly like a write. The allow-list\nis absent from `GET /api/dashboards/{slug}` for the same reason.","security":[{"bearerAuth":[]},{"apiKeyAuth":[]}],"responses":{"200":{"description":"The access record.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardAccess"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"}}},"put":{"tags":["Sharing"],"operationId":"replaceDashboardAccess","summary":"Replace who may open this dashboard","description":"The lists you send are the lists that exist afterwards — replace, not merge, which is\nwhat makes removing the last member possible.\n\n`owner_user_id` is the exception: omit it and the current owner is kept, so tightening a\nvisibility cannot orphan a dashboard by leaving one key out. Send `null` to clear it.\n\n`restricted` requires at least one member or group. Restricted-with-nobody is `private`\nwritten the long way, and it is the shape that loses somebody their report quietly.","security":[{"bearerAuth":[]},{"apiKeyAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardAccess"},"examples":{"restricted":{"summary":"Share with one person and one group","value":{"visibility":"restricted","member_ids":["user_2f9a"],"group_ids":["group_finance"]}}}}}},"responses":{"200":{"description":"Replaced, with the record as it now stands.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardAccess"}}}},"400":{"description":"The body was not JSON, a field is invalid, or `restricted` carries no grants.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/api/dashboards/import":{"post":{"tags":["Sources"],"operationId":"importDashboard","summary":"Publish from a URL","description":"For when the document already lives somewhere the agent writes to. The source is\nremembered so `/refresh` can pull it again.\n\nThe fetch is fenced: only http(s), no redirects to private address space, and a size cap.","security":[{"bearerAuth":[]},{"apiKeyAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","format":"uri","description":"Where the JSON document lives."},"slug":{"allOf":[{"$ref":"#/components/schemas/Slug"}],"description":"Mounts it under a different name than the document's own, without editing the source."},"headers":{"type":"object","additionalProperties":{"type":"string"},"description":"Sent with the fetch. Never stored — a credential-gated source needs them again on every refresh."}},"required":["url"]}}}},"responses":{"201":{"description":"Imported.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublishResult"}}}},"400":{"description":"The body was not JSON, `url` is missing, or the URL is not fetchable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"422":{"$ref":"#/components/responses/ValidationFailed"},"502":{"description":"The source could not be reached, or did not answer with a document.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/dashboards/{slug}/refresh":{"parameters":[{"name":"slug","in":"path","required":true,"description":"The dashboard's identity, its URL and its primary key.","schema":{"$ref":"#/components/schemas/Slug"}}],"post":{"tags":["Sources"],"operationId":"refreshDashboard","summary":"Re-pull from the source it was imported from","description":"Only meaningful for an imported dashboard. One published by POSTing its body has no source to re-read, and saying so plainly beats a cheerful 200 that changed nothing.","security":[{"bearerAuth":[]},{"apiKeyAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"headers":{"type":"object","additionalProperties":{"type":"string"},"description":"Sent with the fetch. Never stored — a credential-gated source needs them again on every refresh."}}}}}},"responses":{"200":{"description":"Re-pulled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublishResult"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"description":"This dashboard has no source URL.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"$ref":"#/components/responses/ValidationFailed"},"502":{"description":"The source could not be reached.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/schema":{"get":{"tags":["Contract"],"operationId":"getDashboardSchema","security":[],"summary":"JSON Schema for the dashboard spec","description":"Generated from the same Zod definitions the publish route validates against. Fetch it once and you have every block, every field and every enum — the same schema this document inlines as `DashboardSpec`, served standalone for editors and validators that want a bare JSON Schema.","responses":{"200":{"description":"A draft-07 JSON Schema document.","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/api/access/me":{"get":{"tags":["Contract"],"operationId":"accessMe","summary":"What this caller is allowed to do","security":[],"description":"Capabilities, not identity: role, whether they may publish, and whether they may manage or share anything they do not own. A UI needs this BEFORE rendering a control — a client that must attempt an action to discover it is forbidden produces a 403 the person reads as a bug. Roles come from Kortix group membership (DASHBOARDS_ADMIN_GROUPS, DASHBOARDS_AUTHOR_GROUPS), so there is no user directory here to drift. Answers for anonymous callers too, with role null and everything false — the page still has to render something for a signed-out visitor.","responses":{"200":{"description":"The caller's capabilities.","content":{"application/json":{"schema":{"type":"object","properties":{"signed_in":{"type":"boolean"},"user_id":{"type":["string","null"]},"email":{"type":["string","null"]},"group_ids":{"type":"array","items":{"type":"string"}},"role":{"type":["string","null"],"enum":["admin","author","viewer",null]},"can_publish":{"type":"boolean"},"can_manage_any":{"type":"boolean"},"can_share_any":{"type":"boolean"}},"required":["signed_in","role","can_publish"]}}}}}}},"/api/auth/sign-in":{"post":{"tags":["Contract"],"operationId":"signIn","summary":"Sign in, sign up, request a magic link, or reset a password","security":[],"description":"An ordinary form POST — `mode` selects password sign-in, sign-up, magic link or reset. Deliberately not a Server Action: behind a proxy whose forwarded host and the browser's origin differ by a port, Next rejects those and the person sees a server-side exception with a digest, while the page itself renders perfectly. Answers 303 back to `/signin` carrying `error` or `notice`, or to `returnTo` (same-origin only) once a session exists. Magic link and reset answer identically whether or not the address exists, because anything else is an account-enumeration oracle.","responses":{"303":{"description":"Redirected — to `returnTo` when signed in, otherwise back to /signin with a message."}}}},"/api/auth/app-signout":{"get":{"tags":["Contract"],"operationId":"signOutAppPassthrough","summary":"Sign out of the Kortix App passthrough","security":[],"description":"Expires the Kortix App gate's access cookie on this origin, so the gate has nothing to trust on the next request and challenges again. The viewer's actual Kortix session is untouched — they stop being signed in HERE, not everywhere. Both cookie names are cleared, and the Secure/SameSite pair is computed from the request: a browser rejects a Secure cookie on an insecure origin, which would make this a silent no-op that answers 200 and signs nobody out.","responses":{"303":{"description":"Cookie expired; follow the redirect."}}},"post":{"tags":["Contract"],"operationId":"signOutAppPassthroughPost","summary":"Sign out of the Kortix App passthrough (POST)","security":[],"description":"Identical to the GET. Takes no write key: a viewer ends their own passthrough with their own identity.","responses":{"303":{"description":"Cookie expired; follow the redirect."}}}},"/api/auth/end-session":{"get":{"tags":["Contract"],"operationId":"signOutSession","summary":"Sign out of this deployment","security":[],"description":"Revokes the refresh token at Kortix, clears the session cookie and redirects to `return_to` (same-origin only). GET rather than POST because it is a link in a menu, and the redirect is what makes the browser apply the cleared cookie. Revocation is best effort — an unreachable upstream still signs you out locally, because refusing to sign someone out when Kortix is down is the wrong failure.","responses":{"303":{"description":"Signed out; follow the redirect."}}},"post":{"tags":["Contract"],"operationId":"signOutSessionPost","summary":"Sign out of this deployment (POST)","security":[],"description":"Identical to the GET. Takes no write key: a viewer ends their own session with their own identity.","responses":{"303":{"description":"Signed out; follow the redirect."}}}},"/api/auth/{kortix}":{"get":{"tags":["Contract"],"operationId":"kortixAuth","summary":"Sign in with Kortix (SDK-owned)","security":[],"description":"One catch-all mounted on `createKortixAuth().handler()` from `@kortix/sdk/server`, serving the whole OAuth 2.1 lifecycle: `/signin`, `/callback`, `/refresh`, `/signout`, `/me` and `/proxy/*`. None of it is implemented in this app — a session cookie whose attributes each app computes slightly differently is how one deployment ends up unable to log out. Answers 404 when this deployment does no sign-in of its own, which is the correct state for an App reached only through the Kortix gate.","responses":{"200":{"description":"Handled by the SDK. The concrete shape depends on the sub-path."},"302":{"description":"Redirect — the sign-in, callback and sign-out legs of the flow."},"404":{"description":"This deployment does not host its own sign-in."}}},"post":{"tags":["Contract"],"operationId":"kortixAuthPost","summary":"Sign in with Kortix (SDK-owned, POST legs)","security":[],"description":"The same handler. POST carries the sign-out and proxy legs; it takes no write key, because a viewer signs out with their own Kortix identity and never the publishing agent's credential.","responses":{"200":{"description":"Handled by the SDK. The concrete shape depends on the sub-path."},"302":{"description":"Redirect — the sign-out leg lands on `returnTo`."},"404":{"description":"This deployment does not host its own sign-in."}}}},"/api/health":{"get":{"tags":["Contract"],"operationId":"getHealth","summary":"Is this process serving?","security":[],"description":"Answers from the process alone, and returns 200 even when the store is unreadable — the body reports that. This is the readiness path a serverless runtime should gate cold start on; gating on `/` ties starting up to the store, so a data-directory problem stops the App from ever serving instead of degrading it.","responses":{"200":{"description":"The process is serving. Check `store` for the rest.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","const":"ok"},"store":{"type":"string","enum":["ok","unavailable"]},"dashboards":{"type":["integer","null"],"description":"How many are stored, or null when the store could not be read."},"detail":{"type":"string","description":"Present only when something is wrong."},"viewer":{"type":"string","enum":["ready","not configured"],"description":"Whether this deployment can identify who is looking. `not configured` means per-dashboard permissions do nothing — a `private` dashboard is readable by anyone who can reach the app, and it looks exactly like a working one."}},"required":["status","store"]}}}}}}},"/api/openapi.json":{"get":{"tags":["Contract"],"operationId":"getOpenApiDocument","security":[],"summary":"This document","responses":{"200":{"description":"An OpenAPI 3.1 document.","content":{"application/json":{"schema":{"type":"object"}}}}}}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"The dashboard API key as `Authorization: Bearer <key>`."},"apiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-Key","description":"The same key, for callers that reach for a header instead."}},"responses":{"Unauthorized":{"description":"Missing or wrong API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Forbidden":{"description":"You can see this dashboard but you do not own it. Only its owner, or a caller with the API key, can change it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"NotFound":{"description":"No dashboard with that slug.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"ValidationFailed":{"description":"The document is not a valid dashboard spec.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}}},"schemas":{"StoredDashboard":{"type":"object","properties":{"slug":{"$ref":"#/components/schemas/Slug"},"title":{"type":"string","minLength":1,"maxLength":200},"subtitle":{"type":"string","maxLength":400},"order":{"type":"integer"},"tone":{"$ref":"#/components/schemas/Tone"},"group":{"type":"string","maxLength":80},"groupOrder":{"type":"integer"},"layout":{"$ref":"#/components/schemas/Layout"},"kortix":{"type":"object","properties":{"agent":{"type":"string","maxLength":120},"projectId":{"type":"string","format":"uuid"},"sessionId":{"type":"string","maxLength":80},"context":{"type":"string","maxLength":4000}},"additionalProperties":false},"meta":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string","maxLength":80},"value":{"type":"string","maxLength":200},"tone":{"$ref":"#/components/schemas/Tone"}},"required":["label","value"],"additionalProperties":false},"maxItems":12},"highlights":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string","maxLength":80},"value":{"type":["string","number"]},"tone":{"$ref":"#/components/schemas/Tone"}},"required":["label","value"],"additionalProperties":false},"maxItems":4},"sections":{"type":"array","items":{"$ref":"#/components/schemas/Section"},"minItems":1,"maxItems":40},"footer":{"type":"string","maxLength":1000},"generatedAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string"},"createdAt":{"type":"string"},"ownerUserId":{"anyOf":[{"type":"string","minLength":1,"maxLength":200},{"type":"null"}],"default":null},"visibility":{"type":"string","enum":["private","project","restricted"],"default":"project"},"sourceUrl":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}],"default":null}},"required":["slug","title","sections","updatedAt","createdAt"],"additionalProperties":false},"EditOp":{"anyOf":[{"type":"object","properties":{"op":{"type":"string","const":"setBlock"},"section":{"type":"integer","minimum":0},"block":{"$ref":"#/components/schemas/EditOp/anyOf/0/properties/section"},"blockId":{"type":"string","minLength":1},"value":{"type":"object","additionalProperties":{}}},"required":["op","value"],"additionalProperties":false},{"type":"object","properties":{"op":{"type":"string","const":"addBlock"},"section":{"$ref":"#/components/schemas/EditOp/anyOf/0/properties/section"},"sectionId":{"type":"string","minLength":1},"at":{"$ref":"#/components/schemas/EditOp/anyOf/0/properties/section"},"value":{"type":"object","additionalProperties":{}}},"required":["op","value"],"additionalProperties":false},{"type":"object","properties":{"op":{"type":"string","const":"removeBlock"},"section":{"$ref":"#/components/schemas/EditOp/anyOf/0/properties/section"},"block":{"$ref":"#/components/schemas/EditOp/anyOf/0/properties/section"},"blockId":{"type":"string","minLength":1}},"required":["op"],"additionalProperties":false},{"type":"object","properties":{"op":{"type":"string","const":"setSection"},"section":{"$ref":"#/components/schemas/EditOp/anyOf/0/properties/section"},"sectionId":{"type":"string","minLength":1},"value":{"type":"object","additionalProperties":{}}},"required":["op","value"],"additionalProperties":false},{"type":"object","properties":{"op":{"type":"string","const":"addSection"},"at":{"$ref":"#/components/schemas/EditOp/anyOf/0/properties/section"},"value":{"type":"object","additionalProperties":{}}},"required":["op","value"],"additionalProperties":false},{"type":"object","properties":{"op":{"type":"string","const":"removeSection"},"section":{"$ref":"#/components/schemas/EditOp/anyOf/0/properties/section"},"sectionId":{"type":"string","minLength":1}},"required":["op"],"additionalProperties":false},{"type":"object","properties":{"op":{"type":"string","const":"merge"},"value":{"type":"object","additionalProperties":{}}},"required":["op","value"],"additionalProperties":false},{"type":"object","properties":{"op":{"type":"string","const":"replaceText"},"find":{"type":"string","minLength":1},"replace":{"type":"string","default":""},"all":{"type":"boolean"}},"required":["op","find"],"additionalProperties":false}]},"Section":{"type":"object","properties":{"id":{"type":"string","maxLength":80},"title":{"type":"string","maxLength":200},"note":{"type":"string","maxLength":400},"columns":{"type":"integer","minimum":1,"maximum":24},"rowHeight":{"type":"integer","minimum":40,"maximum":600},"gap":{"type":"string","enum":["none","xs","sm","md","lg","xl"]},"align":{"type":"string","enum":["start","center","end","stretch"]},"dense":{"type":"boolean"},"hidden":{"type":"boolean"},"only":{"type":"string","enum":["screen","print"]},"blocks":{"type":"array","items":{"$ref":"#/components/schemas/Block"},"minItems":1,"maxItems":80}},"required":["blocks"],"additionalProperties":false},"Block":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","const":"banner"},"id":{"type":"string","maxLength":80},"span":{"$ref":"#/components/schemas/Span"},"rowSpan":{"$ref":"#/components/schemas/RowSpan"},"colStart":{"type":"integer","minimum":1,"maximum":24},"rowStart":{"type":"integer","minimum":1,"maximum":60},"align":{"$ref":"#/components/schemas/Section/properties/align"},"hidden":{"type":"boolean"},"only":{"type":"string","enum":["screen","print"]},"minHeight":{"type":"integer","minimum":60,"maximum":2000},"title":{"type":"string","maxLength":200},"caption":{"type":"string","maxLength":400},"headline":{"type":"string","maxLength":200},"detail":{"type":"string","maxLength":1000},"tone":{"$ref":"#/components/schemas/Tone"},"meta":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string","maxLength":80},"value":{"$ref":"#/components/schemas/StoredDashboard/properties/highlights/items/properties/value"}},"required":["label","value"],"additionalProperties":false},"maxItems":6}},"required":["type","headline","tone"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"stat"},"id":{"$ref":"#/components/schemas/Block/anyOf/0/properties/id"},"span":{"$ref":"#/components/schemas/Block/anyOf/0/properties/span"},"rowSpan":{"$ref":"#/components/schemas/Block/anyOf/0/properties/rowSpan"},"colStart":{"$ref":"#/components/schemas/Block/anyOf/0/properties/colStart"},"rowStart":{"$ref":"#/components/schemas/Block/anyOf/0/properties/rowStart"},"align":{"$ref":"#/components/schemas/Block/anyOf/0/properties/align"},"hidden":{"$ref":"#/components/schemas/Block/anyOf/0/properties/hidden"},"only":{"$ref":"#/components/schemas/Block/anyOf/0/properties/only"},"minHeight":{"$ref":"#/components/schemas/Block/anyOf/0/properties/minHeight"},"title":{"$ref":"#/components/schemas/Block/anyOf/0/properties/title"},"caption":{"$ref":"#/components/schemas/Block/anyOf/0/properties/caption"},"label":{"type":"string","maxLength":120},"value":{"$ref":"#/components/schemas/StoredDashboard/properties/highlights/items/properties/value"},"sublabel":{"type":"string","maxLength":200},"delta":{"type":"object","properties":{"value":{"$ref":"#/components/schemas/StoredDashboard/properties/highlights/items/properties/value"},"direction":{"type":"string","enum":["up","down","flat"]},"tone":{"$ref":"#/components/schemas/Tone"}},"required":["value","direction"],"additionalProperties":false},"tone":{"$ref":"#/components/schemas/Tone"},"rail":{"type":"number","minimum":0,"maximum":1},"spark":{"type":"array","items":{"type":"number"},"maxItems":200}},"required":["type","label","value"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"stats"},"id":{"$ref":"#/components/schemas/Block/anyOf/0/properties/id"},"span":{"$ref":"#/components/schemas/Block/anyOf/0/properties/span"},"rowSpan":{"$ref":"#/components/schemas/Block/anyOf/0/properties/rowSpan"},"colStart":{"$ref":"#/components/schemas/Block/anyOf/0/properties/colStart"},"rowStart":{"$ref":"#/components/schemas/Block/anyOf/0/properties/rowStart"},"align":{"$ref":"#/components/schemas/Block/anyOf/0/properties/align"},"hidden":{"$ref":"#/components/schemas/Block/anyOf/0/properties/hidden"},"only":{"$ref":"#/components/schemas/Block/anyOf/0/properties/only"},"minHeight":{"$ref":"#/components/schemas/Block/anyOf/0/properties/minHeight"},"title":{"$ref":"#/components/schemas/Block/anyOf/0/properties/title"},"caption":{"$ref":"#/components/schemas/Block/anyOf/0/properties/caption"},"items":{"type":"array","items":{"type":"object","properties":{"id":{"$ref":"#/components/schemas/Block/anyOf/0/properties/id"},"colStart":{"$ref":"#/components/schemas/Block/anyOf/0/properties/colStart"},"rowStart":{"$ref":"#/components/schemas/Block/anyOf/0/properties/rowStart"},"align":{"$ref":"#/components/schemas/Block/anyOf/0/properties/align"},"hidden":{"$ref":"#/components/schemas/Block/anyOf/0/properties/hidden"},"only":{"$ref":"#/components/schemas/Block/anyOf/0/properties/only"},"label":{"$ref":"#/components/schemas/Block/anyOf/1/properties/label"},"value":{"$ref":"#/components/schemas/StoredDashboard/properties/highlights/items/properties/value"},"sublabel":{"$ref":"#/components/schemas/Block/anyOf/1/properties/sublabel"},"delta":{"$ref":"#/components/schemas/Block/anyOf/1/properties/delta"},"tone":{"$ref":"#/components/schemas/Block/anyOf/1/properties/tone"},"rail":{"$ref":"#/components/schemas/Block/anyOf/1/properties/rail"},"spark":{"$ref":"#/components/schemas/Block/anyOf/1/properties/spark"}},"required":["label","value"],"additionalProperties":false},"maxItems":12},"columns":{"type":"integer","minimum":1,"maximum":6}},"required":["type","items"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"bignumber"},"id":{"$ref":"#/components/schemas/Block/anyOf/0/properties/id"},"span":{"$ref":"#/components/schemas/Block/anyOf/0/properties/span"},"rowSpan":{"$ref":"#/components/schemas/Block/anyOf/0/properties/rowSpan"},"colStart":{"$ref":"#/components/schemas/Block/anyOf/0/properties/colStart"},"rowStart":{"$ref":"#/components/schemas/Block/anyOf/0/properties/rowStart"},"align":{"type":"string","enum":["left","center"]},"hidden":{"$ref":"#/components/schemas/Block/anyOf/0/properties/hidden"},"only":{"$ref":"#/components/schemas/Block/anyOf/0/properties/only"},"minHeight":{"$ref":"#/components/schemas/Block/anyOf/0/properties/minHeight"},"title":{"$ref":"#/components/schemas/Block/anyOf/0/properties/title"},"caption":{"$ref":"#/components/schemas/Block/anyOf/0/properties/caption"},"value":{"$ref":"#/components/schemas/StoredDashboard/properties/highlights/items/properties/value"},"label":{"type":"string","maxLength":160},"context":{"type":"string","maxLength":400},"tone":{"$ref":"#/components/schemas/Tone"}},"required":["type","value"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"gauge"},"id":{"$ref":"#/components/schemas/Block/anyOf/0/properties/id"},"span":{"$ref":"#/components/schemas/Block/anyOf/0/properties/span"},"rowSpan":{"$ref":"#/components/schemas/Block/anyOf/0/properties/rowSpan"},"colStart":{"$ref":"#/components/schemas/Block/anyOf/0/properties/colStart"},"rowStart":{"$ref":"#/components/schemas/Block/anyOf/0/properties/rowStart"},"align":{"$ref":"#/components/schemas/Block/anyOf/0/properties/align"},"hidden":{"$ref":"#/components/schemas/Block/anyOf/0/properties/hidden"},"only":{"$ref":"#/components/schemas/Block/anyOf/0/properties/only"},"minHeight":{"$ref":"#/components/schemas/Block/anyOf/0/properties/minHeight"},"title":{"$ref":"#/components/schemas/Block/anyOf/0/properties/title"},"caption":{"$ref":"#/components/schemas/Block/anyOf/0/properties/caption"},"value":{"type":"number"},"min":{"type":"number"},"max":{"type":"number"},"label":{"type":"string","maxLength":120},"unit":{"type":"string","maxLength":16},"tone":{"$ref":"#/components/schemas/Tone"},"height":{"type":"integer","minimum":100,"maximum":900},"bands":{"type":"array","items":{"type":"object","properties":{"upTo":{"type":"number"},"tone":{"$ref":"#/components/schemas/Tone"}},"required":["upTo","tone"],"additionalProperties":false},"maxItems":6}},"required":["type","value"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"segments"},"id":{"$ref":"#/components/schemas/Block/anyOf/0/properties/id"},"span":{"$ref":"#/components/schemas/Block/anyOf/0/properties/span"},"rowSpan":{"$ref":"#/components/schemas/Block/anyOf/0/properties/rowSpan"},"colStart":{"$ref":"#/components/schemas/Block/anyOf/0/properties/colStart"},"rowStart":{"$ref":"#/components/schemas/Block/anyOf/0/properties/rowStart"},"align":{"$ref":"#/components/schemas/Block/anyOf/0/properties/align"},"hidden":{"$ref":"#/components/schemas/Block/anyOf/0/properties/hidden"},"only":{"$ref":"#/components/schemas/Block/anyOf/0/properties/only"},"minHeight":{"$ref":"#/components/schemas/Block/anyOf/0/properties/minHeight"},"title":{"$ref":"#/components/schemas/Block/anyOf/0/properties/title"},"caption":{"$ref":"#/components/schemas/Block/anyOf/0/properties/caption"},"segments":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string","maxLength":120},"value":{"type":"number"},"tone":{"$ref":"#/components/schemas/Tone"}},"required":["label","value"],"additionalProperties":false},"maxItems":12},"total":{"$ref":"#/components/schemas/StoredDashboard/properties/highlights/items/properties/value"},"totalLabel":{"type":"string","maxLength":160}},"required":["type","segments"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"progressList"},"id":{"$ref":"#/components/schemas/Block/anyOf/0/properties/id"},"span":{"$ref":"#/components/schemas/Block/anyOf/0/properties/span"},"rowSpan":{"$ref":"#/components/schemas/Block/anyOf/0/properties/rowSpan"},"colStart":{"$ref":"#/components/schemas/Block/anyOf/0/properties/colStart"},"rowStart":{"$ref":"#/components/schemas/Block/anyOf/0/properties/rowStart"},"align":{"$ref":"#/components/schemas/Block/anyOf/0/properties/align"},"hidden":{"$ref":"#/components/schemas/Block/anyOf/0/properties/hidden"},"only":{"$ref":"#/components/schemas/Block/anyOf/0/properties/only"},"minHeight":{"$ref":"#/components/schemas/Block/anyOf/0/properties/minHeight"},"title":{"$ref":"#/components/schemas/Block/anyOf/0/properties/title"},"caption":{"$ref":"#/components/schemas/Block/anyOf/0/properties/caption"},"items":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string","maxLength":160},"value":{"type":"number"},"max":{"type":"number"},"display":{"type":"string","maxLength":40},"tone":{"$ref":"#/components/schemas/Tone"}},"required":["label","value"],"additionalProperties":false},"maxItems":60}},"required":["type","items"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"scorecard"},"id":{"$ref":"#/components/schemas/Block/anyOf/0/properties/id"},"span":{"$ref":"#/components/schemas/Block/anyOf/0/properties/span"},"rowSpan":{"$ref":"#/components/schemas/Block/anyOf/0/properties/rowSpan"},"colStart":{"$ref":"#/components/schemas/Block/anyOf/0/properties/colStart"},"rowStart":{"$ref":"#/components/schemas/Block/anyOf/0/properties/rowStart"},"align":{"$ref":"#/components/schemas/Block/anyOf/0/properties/align"},"hidden":{"$ref":"#/components/schemas/Block/anyOf/0/properties/hidden"},"only":{"$ref":"#/components/schemas/Block/anyOf/0/properties/only"},"minHeight":{"$ref":"#/components/schemas/Block/anyOf/0/properties/minHeight"},"title":{"$ref":"#/components/schemas/Block/anyOf/0/properties/title"},"caption":{"$ref":"#/components/schemas/Block/anyOf/0/properties/caption"},"overall":{"type":"object","properties":{"grade":{"$ref":"#/components/schemas/StoredDashboard/properties/highlights/items/properties/value"},"label":{"type":"string","maxLength":120},"detail":{"type":"string","maxLength":600},"tone":{"$ref":"#/components/schemas/Tone"}},"required":["grade"],"additionalProperties":false},"criteria":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string","maxLength":160},"score":{"type":"number"},"max":{"type":"number"},"weight":{"type":"number"},"note":{"type":"string","maxLength":600},"tone":{"$ref":"#/components/schemas/Tone"}},"required":["label","score"],"additionalProperties":false},"maxItems":40},"scale":{"type":"number"}},"required":["type","criteria"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"chart"},"id":{"$ref":"#/components/schemas/Block/anyOf/0/properties/id"},"span":{"$ref":"#/components/schemas/Block/anyOf/0/properties/span"},"rowSpan":{"$ref":"#/components/schemas/Block/anyOf/0/properties/rowSpan"},"colStart":{"$ref":"#/components/schemas/Block/anyOf/0/properties/colStart"},"rowStart":{"$ref":"#/components/schemas/Block/anyOf/0/properties/rowStart"},"align":{"$ref":"#/components/schemas/Block/anyOf/0/properties/align"},"hidden":{"$ref":"#/components/schemas/Block/anyOf/0/properties/hidden"},"only":{"$ref":"#/components/schemas/Block/anyOf/0/properties/only"},"minHeight":{"$ref":"#/components/schemas/Block/anyOf/0/properties/minHeight"},"title":{"$ref":"#/components/schemas/Block/anyOf/0/properties/title"},"caption":{"$ref":"#/components/schemas/Block/anyOf/0/properties/caption"},"kind":{"type":"string","enum":["bar","barStacked","barHorizontal","line","area","pie","donut","scatter","radar","funnel"]},"categories":{"type":"array","items":{"type":"string"}},"series":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","maxLength":120},"data":{"type":"array","items":{"type":["number","null"]}},"tone":{"$ref":"#/components/schemas/Tone"}},"required":["name","data"],"additionalProperties":false}},"legend":{"type":"boolean"},"unit":{"type":"string","maxLength":16},"height":{"type":"integer","minimum":120,"maximum":900},"stacked":{"type":"boolean"},"option":{"type":"object","additionalProperties":{}}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"heatmap"},"id":{"$ref":"#/components/schemas/Block/anyOf/0/properties/id"},"span":{"$ref":"#/components/schemas/Block/anyOf/0/properties/span"},"rowSpan":{"$ref":"#/components/schemas/Block/anyOf/0/properties/rowSpan"},"colStart":{"$ref":"#/components/schemas/Block/anyOf/0/properties/colStart"},"rowStart":{"$ref":"#/components/schemas/Block/anyOf/0/properties/rowStart"},"align":{"$ref":"#/components/schemas/Block/anyOf/0/properties/align"},"hidden":{"$ref":"#/components/schemas/Block/anyOf/0/properties/hidden"},"only":{"$ref":"#/components/schemas/Block/anyOf/0/properties/only"},"minHeight":{"$ref":"#/components/schemas/Block/anyOf/0/properties/minHeight"},"title":{"$ref":"#/components/schemas/Block/anyOf/0/properties/title"},"caption":{"$ref":"#/components/schemas/Block/anyOf/0/properties/caption"},"xLabels":{"type":"array","items":{"type":"string"},"maxItems":200},"yLabels":{"type":"array","items":{"type":"string"},"maxItems":200},"values":{"type":"array","items":{"type":"array","items":{"type":["number","null"]}},"maxItems":200},"unit":{"type":"string","maxLength":16},"height":{"type":"integer","minimum":120,"maximum":900}},"required":["type","xLabels","yLabels","values"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"statusMatrix"},"id":{"$ref":"#/components/schemas/Block/anyOf/0/properties/id"},"span":{"$ref":"#/components/schemas/Block/anyOf/0/properties/span"},"rowSpan":{"$ref":"#/components/schemas/Block/anyOf/0/properties/rowSpan"},"colStart":{"$ref":"#/components/schemas/Block/anyOf/0/properties/colStart"},"rowStart":{"$ref":"#/components/schemas/Block/anyOf/0/properties/rowStart"},"align":{"$ref":"#/components/schemas/Block/anyOf/0/properties/align"},"hidden":{"$ref":"#/components/schemas/Block/anyOf/0/properties/hidden"},"only":{"$ref":"#/components/schemas/Block/anyOf/0/properties/only"},"minHeight":{"$ref":"#/components/schemas/Block/anyOf/0/properties/minHeight"},"title":{"$ref":"#/components/schemas/Block/anyOf/0/properties/title"},"caption":{"$ref":"#/components/schemas/Block/anyOf/0/properties/caption"},"columns":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string","maxLength":80},"short":{"type":"string","maxLength":16}},"required":["label"],"additionalProperties":false},"minItems":1,"maxItems":20},"rows":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string","maxLength":160},"note":{"type":"string","maxLength":300},"cells":{"type":"array","items":{"anyOf":[{"type":"null"},{"type":"object","properties":{"tone":{"$ref":"#/components/schemas/Tone"},"label":{"type":"string","maxLength":8},"note":{"type":"string","maxLength":300}},"additionalProperties":false}]},"maxItems":20}},"required":["label","cells"],"additionalProperties":false},"maxItems":200},"legend":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string","maxLength":80},"tone":{"$ref":"#/components/schemas/Tone"}},"required":["label","tone"],"additionalProperties":false},"maxItems":8}},"required":["type","columns","rows"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"comparison"},"id":{"$ref":"#/components/schemas/Block/anyOf/0/properties/id"},"span":{"$ref":"#/components/schemas/Block/anyOf/0/properties/span"},"rowSpan":{"$ref":"#/components/schemas/Block/anyOf/0/properties/rowSpan"},"colStart":{"$ref":"#/components/schemas/Block/anyOf/0/properties/colStart"},"rowStart":{"$ref":"#/components/schemas/Block/anyOf/0/properties/rowStart"},"align":{"$ref":"#/components/schemas/Block/anyOf/0/properties/align"},"hidden":{"$ref":"#/components/schemas/Block/anyOf/0/properties/hidden"},"only":{"$ref":"#/components/schemas/Block/anyOf/0/properties/only"},"minHeight":{"$ref":"#/components/schemas/Block/anyOf/0/properties/minHeight"},"title":{"$ref":"#/components/schemas/Block/anyOf/0/properties/title"},"caption":{"$ref":"#/components/schemas/Block/anyOf/0/properties/caption"},"left":{"type":"object","properties":{"label":{"type":"string","maxLength":120},"caption":{"type":"string","maxLength":200}},"required":["label"],"additionalProperties":false},"right":{"type":"object","properties":{"label":{"type":"string","maxLength":120},"caption":{"type":"string","maxLength":200}},"required":["label"],"additionalProperties":false},"rows":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string","maxLength":200},"left":{"type":["string","number","null"]},"right":{"type":["string","number","null"]},"delta":{"$ref":"#/components/schemas/StoredDashboard/properties/highlights/items/properties/value"},"tone":{"$ref":"#/components/schemas/Tone"},"note":{"type":"string","maxLength":400}},"required":["label","left","right"],"additionalProperties":false},"maxItems":200},"numeric":{"type":"boolean"}},"required":["type","left","right","rows"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"table"},"id":{"$ref":"#/components/schemas/Block/anyOf/0/properties/id"},"span":{"$ref":"#/components/schemas/Block/anyOf/0/properties/span"},"rowSpan":{"$ref":"#/components/schemas/Block/anyOf/0/properties/rowSpan"},"colStart":{"$ref":"#/components/schemas/Block/anyOf/0/properties/colStart"},"rowStart":{"$ref":"#/components/schemas/Block/anyOf/0/properties/rowStart"},"align":{"$ref":"#/components/schemas/Block/anyOf/0/properties/align"},"hidden":{"$ref":"#/components/schemas/Block/anyOf/0/properties/hidden"},"only":{"$ref":"#/components/schemas/Block/anyOf/0/properties/only"},"minHeight":{"$ref":"#/components/schemas/Block/anyOf/0/properties/minHeight"},"title":{"$ref":"#/components/schemas/Block/anyOf/0/properties/title"},"caption":{"$ref":"#/components/schemas/Block/anyOf/0/properties/caption"},"columns":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","maxLength":80},"label":{"type":"string","maxLength":120},"align":{"type":"string","enum":["left","right","center"]},"numeric":{"type":"boolean"},"width":{"type":"string","maxLength":24}},"required":["key","label"],"additionalProperties":false},"minItems":1,"maxItems":16},"rows":{"type":"array","items":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/Cell"}},"maxItems":5000},"searchable":{"type":"boolean"},"maxHeight":{"type":"integer","minimum":120,"maximum":2000},"numbered":{"type":"boolean"},"striped":{"type":"boolean"},"footer":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/Cell"}}},"required":["type","columns","rows"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"list"},"id":{"$ref":"#/components/schemas/Block/anyOf/0/properties/id"},"span":{"$ref":"#/components/schemas/Block/anyOf/0/properties/span"},"rowSpan":{"$ref":"#/components/schemas/Block/anyOf/0/properties/rowSpan"},"colStart":{"$ref":"#/components/schemas/Block/anyOf/0/properties/colStart"},"rowStart":{"$ref":"#/components/schemas/Block/anyOf/0/properties/rowStart"},"align":{"$ref":"#/components/schemas/Block/anyOf/0/properties/align"},"hidden":{"$ref":"#/components/schemas/Block/anyOf/0/properties/hidden"},"only":{"$ref":"#/components/schemas/Block/anyOf/0/properties/only"},"minHeight":{"$ref":"#/components/schemas/Block/anyOf/0/properties/minHeight"},"title":{"$ref":"#/components/schemas/Block/anyOf/0/properties/title"},"caption":{"$ref":"#/components/schemas/Block/anyOf/0/properties/caption"},"items":{"type":"array","items":{"type":"object","properties":{"title":{"type":"string","maxLength":300},"detail":{"type":"string","maxLength":2000},"meta":{"type":"string","maxLength":200},"tone":{"$ref":"#/components/schemas/Tone"}},"required":["title"],"additionalProperties":false},"maxItems":500},"ordered":{"type":"boolean"}},"required":["type","items"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"timeline"},"id":{"$ref":"#/components/schemas/Block/anyOf/0/properties/id"},"span":{"$ref":"#/components/schemas/Block/anyOf/0/properties/span"},"rowSpan":{"$ref":"#/components/schemas/Block/anyOf/0/properties/rowSpan"},"colStart":{"$ref":"#/components/schemas/Block/anyOf/0/properties/colStart"},"rowStart":{"$ref":"#/components/schemas/Block/anyOf/0/properties/rowStart"},"align":{"$ref":"#/components/schemas/Block/anyOf/0/properties/align"},"hidden":{"$ref":"#/components/schemas/Block/anyOf/0/properties/hidden"},"only":{"$ref":"#/components/schemas/Block/anyOf/0/properties/only"},"minHeight":{"$ref":"#/components/schemas/Block/anyOf/0/properties/minHeight"},"title":{"$ref":"#/components/schemas/Block/anyOf/0/properties/title"},"caption":{"$ref":"#/components/schemas/Block/anyOf/0/properties/caption"},"events":{"type":"array","items":{"type":"object","properties":{"when":{"type":"string","maxLength":80},"title":{"type":"string","maxLength":300},"detail":{"type":"string","maxLength":2000},"tone":{"$ref":"#/components/schemas/Tone"}},"required":["when","title"],"additionalProperties":false},"maxItems":300}},"required":["type","events"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"fields"},"id":{"$ref":"#/components/schemas/Block/anyOf/0/properties/id"},"span":{"$ref":"#/components/schemas/Block/anyOf/0/properties/span"},"rowSpan":{"$ref":"#/components/schemas/Block/anyOf/0/properties/rowSpan"},"colStart":{"$ref":"#/components/schemas/Block/anyOf/0/properties/colStart"},"rowStart":{"$ref":"#/components/schemas/Block/anyOf/0/properties/rowStart"},"align":{"$ref":"#/components/schemas/Block/anyOf/0/properties/align"},"hidden":{"$ref":"#/components/schemas/Block/anyOf/0/properties/hidden"},"only":{"$ref":"#/components/schemas/Block/anyOf/0/properties/only"},"minHeight":{"$ref":"#/components/schemas/Block/anyOf/0/properties/minHeight"},"title":{"$ref":"#/components/schemas/Block/anyOf/0/properties/title"},"caption":{"$ref":"#/components/schemas/Block/anyOf/0/properties/caption"},"fields":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string","maxLength":120},"value":{"type":"string","maxLength":4000},"tone":{"$ref":"#/components/schemas/Tone"}},"required":["label","value"],"additionalProperties":false},"maxItems":40},"columns":{"type":"number","enum":[1,2,3]},"inline":{"type":"boolean"}},"required":["type","fields"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"pills"},"id":{"$ref":"#/components/schemas/Block/anyOf/0/properties/id"},"span":{"$ref":"#/components/schemas/Block/anyOf/0/properties/span"},"rowSpan":{"$ref":"#/components/schemas/Block/anyOf/0/properties/rowSpan"},"colStart":{"$ref":"#/components/schemas/Block/anyOf/0/properties/colStart"},"rowStart":{"$ref":"#/components/schemas/Block/anyOf/0/properties/rowStart"},"align":{"$ref":"#/components/schemas/Block/anyOf/0/properties/align"},"hidden":{"$ref":"#/components/schemas/Block/anyOf/0/properties/hidden"},"only":{"$ref":"#/components/schemas/Block/anyOf/0/properties/only"},"minHeight":{"$ref":"#/components/schemas/Block/anyOf/0/properties/minHeight"},"title":{"$ref":"#/components/schemas/Block/anyOf/0/properties/title"},"caption":{"$ref":"#/components/schemas/Block/anyOf/0/properties/caption"},"pills":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string","maxLength":120},"value":{"$ref":"#/components/schemas/StoredDashboard/properties/highlights/items/properties/value"},"tone":{"$ref":"#/components/schemas/Tone"}},"required":["label"],"additionalProperties":false},"maxItems":60},"solid":{"type":"boolean"}},"required":["type","pills"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"people"},"id":{"$ref":"#/components/schemas/Block/anyOf/0/properties/id"},"span":{"$ref":"#/components/schemas/Block/anyOf/0/properties/span"},"rowSpan":{"$ref":"#/components/schemas/Block/anyOf/0/properties/rowSpan"},"colStart":{"$ref":"#/components/schemas/Block/anyOf/0/properties/colStart"},"rowStart":{"$ref":"#/components/schemas/Block/anyOf/0/properties/rowStart"},"align":{"$ref":"#/components/schemas/Block/anyOf/0/properties/align"},"hidden":{"$ref":"#/components/schemas/Block/anyOf/0/properties/hidden"},"only":{"$ref":"#/components/schemas/Block/anyOf/0/properties/only"},"minHeight":{"$ref":"#/components/schemas/Block/anyOf/0/properties/minHeight"},"title":{"$ref":"#/components/schemas/Block/anyOf/0/properties/title"},"caption":{"$ref":"#/components/schemas/Block/anyOf/0/properties/caption"},"people":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","maxLength":160},"role":{"type":"string","maxLength":160},"detail":{"type":"string","maxLength":400},"initials":{"type":"string","maxLength":3},"avatarUrl":{"type":"string","format":"uri"},"status":{"type":"string","maxLength":80},"tone":{"$ref":"#/components/schemas/Tone"}},"required":["name"],"additionalProperties":false},"maxItems":60},"columns":{"type":"number","enum":[1,2,3]}},"required":["type","people"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"title"},"id":{"$ref":"#/components/schemas/Block/anyOf/0/properties/id"},"span":{"$ref":"#/components/schemas/Block/anyOf/0/properties/span"},"rowSpan":{"$ref":"#/components/schemas/Block/anyOf/0/properties/rowSpan"},"colStart":{"$ref":"#/components/schemas/Block/anyOf/0/properties/colStart"},"rowStart":{"$ref":"#/components/schemas/Block/anyOf/0/properties/rowStart"},"align":{"$ref":"#/components/schemas/Block/anyOf/3/properties/align"},"hidden":{"$ref":"#/components/schemas/Block/anyOf/0/properties/hidden"},"only":{"$ref":"#/components/schemas/Block/anyOf/0/properties/only"},"minHeight":{"$ref":"#/components/schemas/Block/anyOf/0/properties/minHeight"},"eyebrow":{"type":"string","maxLength":120},"headline":{"type":"string","maxLength":300},"standfirst":{"type":"string","maxLength":1200},"byline":{"type":"string","maxLength":200},"dateline":{"type":"string","maxLength":120},"tone":{"$ref":"#/components/schemas/Tone"},"rule":{"type":"boolean"}},"required":["type","headline"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"heading"},"id":{"$ref":"#/components/schemas/Block/anyOf/0/properties/id"},"span":{"$ref":"#/components/schemas/Block/anyOf/0/properties/span"},"rowSpan":{"$ref":"#/components/schemas/Block/anyOf/0/properties/rowSpan"},"colStart":{"$ref":"#/components/schemas/Block/anyOf/0/properties/colStart"},"rowStart":{"$ref":"#/components/schemas/Block/anyOf/0/properties/rowStart"},"align":{"$ref":"#/components/schemas/Block/anyOf/3/properties/align"},"hidden":{"$ref":"#/components/schemas/Block/anyOf/0/properties/hidden"},"only":{"$ref":"#/components/schemas/Block/anyOf/0/properties/only"},"minHeight":{"$ref":"#/components/schemas/Block/anyOf/0/properties/minHeight"},"text":{"type":"string","maxLength":300},"level":{"type":"number","enum":[2,3,4]},"eyebrow":{"type":"string","maxLength":120},"tone":{"$ref":"#/components/schemas/Tone"},"rule":{"type":"boolean"}},"required":["type","text"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"paragraph"},"id":{"$ref":"#/components/schemas/Block/anyOf/0/properties/id"},"span":{"$ref":"#/components/schemas/Block/anyOf/0/properties/span"},"rowSpan":{"$ref":"#/components/schemas/Block/anyOf/0/properties/rowSpan"},"colStart":{"$ref":"#/components/schemas/Block/anyOf/0/properties/colStart"},"rowStart":{"$ref":"#/components/schemas/Block/anyOf/0/properties/rowStart"},"align":{"$ref":"#/components/schemas/Block/anyOf/3/properties/align"},"hidden":{"$ref":"#/components/schemas/Block/anyOf/0/properties/hidden"},"only":{"$ref":"#/components/schemas/Block/anyOf/0/properties/only"},"minHeight":{"$ref":"#/components/schemas/Block/anyOf/0/properties/minHeight"},"text":{"type":"string","maxLength":6000},"lead":{"type":"boolean"},"tone":{"$ref":"#/components/schemas/Tone"}},"required":["type","text"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"prose"},"id":{"$ref":"#/components/schemas/Block/anyOf/0/properties/id"},"span":{"$ref":"#/components/schemas/Block/anyOf/0/properties/span"},"rowSpan":{"$ref":"#/components/schemas/Block/anyOf/0/properties/rowSpan"},"colStart":{"$ref":"#/components/schemas/Block/anyOf/0/properties/colStart"},"rowStart":{"$ref":"#/components/schemas/Block/anyOf/0/properties/rowStart"},"align":{"$ref":"#/components/schemas/Block/anyOf/0/properties/align"},"hidden":{"$ref":"#/components/schemas/Block/anyOf/0/properties/hidden"},"only":{"$ref":"#/components/schemas/Block/anyOf/0/properties/only"},"minHeight":{"$ref":"#/components/schemas/Block/anyOf/0/properties/minHeight"},"title":{"$ref":"#/components/schemas/Block/anyOf/0/properties/title"},"caption":{"$ref":"#/components/schemas/Block/anyOf/0/properties/caption"},"markdown":{"type":"string","maxLength":40000},"size":{"type":"string","enum":["sm","base","lg"]},"columns":{"type":"number","enum":[1,2]},"dropCap":{"type":"boolean"},"plain":{"type":"boolean"}},"required":["type","markdown"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"callout"},"id":{"$ref":"#/components/schemas/Block/anyOf/0/properties/id"},"span":{"$ref":"#/components/schemas/Block/anyOf/0/properties/span"},"rowSpan":{"$ref":"#/components/schemas/Block/anyOf/0/properties/rowSpan"},"colStart":{"$ref":"#/components/schemas/Block/anyOf/0/properties/colStart"},"rowStart":{"$ref":"#/components/schemas/Block/anyOf/0/properties/rowStart"},"align":{"$ref":"#/components/schemas/Block/anyOf/0/properties/align"},"hidden":{"$ref":"#/components/schemas/Block/anyOf/0/properties/hidden"},"only":{"$ref":"#/components/schemas/Block/anyOf/0/properties/only"},"minHeight":{"$ref":"#/components/schemas/Block/anyOf/0/properties/minHeight"},"tone":{"$ref":"#/components/schemas/Tone"},"title":{"type":"string","maxLength":200},"markdown":{"type":"string","maxLength":8000},"icon":{"type":"string","enum":["note","info","tip","warning","danger","success","none"]}},"required":["type","markdown"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"quote"},"id":{"$ref":"#/components/schemas/Block/anyOf/0/properties/id"},"span":{"$ref":"#/components/schemas/Block/anyOf/0/properties/span"},"rowSpan":{"$ref":"#/components/schemas/Block/anyOf/0/properties/rowSpan"},"colStart":{"$ref":"#/components/schemas/Block/anyOf/0/properties/colStart"},"rowStart":{"$ref":"#/components/schemas/Block/anyOf/0/properties/rowStart"},"align":{"$ref":"#/components/schemas/Block/anyOf/3/properties/align"},"hidden":{"$ref":"#/components/schemas/Block/anyOf/0/properties/hidden"},"only":{"$ref":"#/components/schemas/Block/anyOf/0/properties/only"},"minHeight":{"$ref":"#/components/schemas/Block/anyOf/0/properties/minHeight"},"quote":{"type":"string","maxLength":2000},"attribution":{"type":"string","maxLength":160},"role":{"type":"string","maxLength":160},"source":{"type":"string","maxLength":200},"tone":{"$ref":"#/components/schemas/Tone"}},"required":["type","quote"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"code"},"id":{"$ref":"#/components/schemas/Block/anyOf/0/properties/id"},"span":{"$ref":"#/components/schemas/Block/anyOf/0/properties/span"},"rowSpan":{"$ref":"#/components/schemas/Block/anyOf/0/properties/rowSpan"},"colStart":{"$ref":"#/components/schemas/Block/anyOf/0/properties/colStart"},"rowStart":{"$ref":"#/components/schemas/Block/anyOf/0/properties/rowStart"},"align":{"$ref":"#/components/schemas/Block/anyOf/0/properties/align"},"hidden":{"$ref":"#/components/schemas/Block/anyOf/0/properties/hidden"},"only":{"$ref":"#/components/schemas/Block/anyOf/0/properties/only"},"minHeight":{"$ref":"#/components/schemas/Block/anyOf/0/properties/minHeight"},"title":{"$ref":"#/components/schemas/Block/anyOf/0/properties/title"},"caption":{"$ref":"#/components/schemas/Block/anyOf/0/properties/caption"},"code":{"type":"string","maxLength":20000},"language":{"type":"string","maxLength":24},"filename":{"type":"string","maxLength":200},"wrap":{"type":"boolean"},"lineNumbers":{"type":"boolean"},"highlight":{"type":"array","items":{"type":"integer","minimum":1},"maxItems":200},"maxHeight":{"type":"integer","minimum":80,"maximum":2000}},"required":["type","code"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"steps"},"id":{"$ref":"#/components/schemas/Block/anyOf/0/properties/id"},"span":{"$ref":"#/components/schemas/Block/anyOf/0/properties/span"},"rowSpan":{"$ref":"#/components/schemas/Block/anyOf/0/properties/rowSpan"},"colStart":{"$ref":"#/components/schemas/Block/anyOf/0/properties/colStart"},"rowStart":{"$ref":"#/components/schemas/Block/anyOf/0/properties/rowStart"},"align":{"$ref":"#/components/schemas/Block/anyOf/0/properties/align"},"hidden":{"$ref":"#/components/schemas/Block/anyOf/0/properties/hidden"},"only":{"$ref":"#/components/schemas/Block/anyOf/0/properties/only"},"minHeight":{"$ref":"#/components/schemas/Block/anyOf/0/properties/minHeight"},"title":{"$ref":"#/components/schemas/Block/anyOf/0/properties/title"},"caption":{"$ref":"#/components/schemas/Block/anyOf/0/properties/caption"},"steps":{"type":"array","items":{"type":"object","properties":{"title":{"type":"string","maxLength":300},"detail":{"type":"string","maxLength":2000},"meta":{"type":"string","maxLength":160},"status":{"type":"string","enum":["done","active","todo","blocked"]}},"required":["title"],"additionalProperties":false},"maxItems":100},"start":{"type":"integer","minimum":0,"maximum":999}},"required":["type","steps"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"checklist"},"id":{"$ref":"#/components/schemas/Block/anyOf/0/properties/id"},"span":{"$ref":"#/components/schemas/Block/anyOf/0/properties/span"},"rowSpan":{"$ref":"#/components/schemas/Block/anyOf/0/properties/rowSpan"},"colStart":{"$ref":"#/components/schemas/Block/anyOf/0/properties/colStart"},"rowStart":{"$ref":"#/components/schemas/Block/anyOf/0/properties/rowStart"},"align":{"$ref":"#/components/schemas/Block/anyOf/0/properties/align"},"hidden":{"$ref":"#/components/schemas/Block/anyOf/0/properties/hidden"},"only":{"$ref":"#/components/schemas/Block/anyOf/0/properties/only"},"minHeight":{"$ref":"#/components/schemas/Block/anyOf/0/properties/minHeight"},"title":{"$ref":"#/components/schemas/Block/anyOf/0/properties/title"},"caption":{"$ref":"#/components/schemas/Block/anyOf/0/properties/caption"},"items":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string","maxLength":300},"state":{"type":"string","enum":["done","todo","blocked","na"]},"detail":{"type":"string","maxLength":1000},"meta":{"type":"string","maxLength":160}},"required":["label"],"additionalProperties":false},"maxItems":200},"progress":{"type":"boolean"}},"required":["type","items"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"figure"},"id":{"$ref":"#/components/schemas/Block/anyOf/0/properties/id"},"span":{"$ref":"#/components/schemas/Block/anyOf/0/properties/span"},"rowSpan":{"$ref":"#/components/schemas/Block/anyOf/0/properties/rowSpan"},"colStart":{"$ref":"#/components/schemas/Block/anyOf/0/properties/colStart"},"rowStart":{"$ref":"#/components/schemas/Block/anyOf/0/properties/rowStart"},"align":{"$ref":"#/components/schemas/Block/anyOf/0/properties/align"},"hidden":{"$ref":"#/components/schemas/Block/anyOf/0/properties/hidden"},"only":{"$ref":"#/components/schemas/Block/anyOf/0/properties/only"},"minHeight":{"$ref":"#/components/schemas/Block/anyOf/0/properties/minHeight"},"title":{"$ref":"#/components/schemas/Block/anyOf/0/properties/title"},"caption":{"$ref":"#/components/schemas/Block/anyOf/0/properties/caption"},"url":{"type":"string","format":"uri"},"alt":{"type":"string","minLength":1,"maxLength":400},"label":{"type":"string","maxLength":40},"figcaption":{"type":"string","maxLength":1000},"credit":{"type":"string","maxLength":200},"height":{"type":"integer","minimum":80,"maximum":1200},"aspect":{"type":"string","enum":["16/9","4/3","3/2","1/1","auto"]},"fit":{"type":"string","enum":["contain","cover"]},"plain":{"type":"boolean"}},"required":["type","url","alt"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"links"},"id":{"$ref":"#/components/schemas/Block/anyOf/0/properties/id"},"span":{"$ref":"#/components/schemas/Block/anyOf/0/properties/span"},"rowSpan":{"$ref":"#/components/schemas/Block/anyOf/0/properties/rowSpan"},"colStart":{"$ref":"#/components/schemas/Block/anyOf/0/properties/colStart"},"rowStart":{"$ref":"#/components/schemas/Block/anyOf/0/properties/rowStart"},"align":{"$ref":"#/components/schemas/Block/anyOf/0/properties/align"},"hidden":{"$ref":"#/components/schemas/Block/anyOf/0/properties/hidden"},"only":{"$ref":"#/components/schemas/Block/anyOf/0/properties/only"},"minHeight":{"$ref":"#/components/schemas/Block/anyOf/0/properties/minHeight"},"title":{"$ref":"#/components/schemas/Block/anyOf/0/properties/title"},"caption":{"$ref":"#/components/schemas/Block/anyOf/0/properties/caption"},"links":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string","maxLength":240},"url":{"type":"string","format":"uri"},"note":{"type":"string","maxLength":400},"source":{"type":"string","maxLength":80},"tone":{"$ref":"#/components/schemas/Tone"}},"required":["label","url"],"additionalProperties":false},"maxItems":100},"columns":{"type":"number","enum":[1,2]}},"required":["type","links"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"footnotes"},"id":{"$ref":"#/components/schemas/Block/anyOf/0/properties/id"},"span":{"$ref":"#/components/schemas/Block/anyOf/0/properties/span"},"rowSpan":{"$ref":"#/components/schemas/Block/anyOf/0/properties/rowSpan"},"colStart":{"$ref":"#/components/schemas/Block/anyOf/0/properties/colStart"},"rowStart":{"$ref":"#/components/schemas/Block/anyOf/0/properties/rowStart"},"align":{"$ref":"#/components/schemas/Block/anyOf/0/properties/align"},"hidden":{"$ref":"#/components/schemas/Block/anyOf/0/properties/hidden"},"only":{"$ref":"#/components/schemas/Block/anyOf/0/properties/only"},"minHeight":{"$ref":"#/components/schemas/Block/anyOf/0/properties/minHeight"},"title":{"$ref":"#/components/schemas/Block/anyOf/0/properties/title"},"caption":{"$ref":"#/components/schemas/Block/anyOf/0/properties/caption"},"notes":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string","maxLength":8},"text":{"type":"string","maxLength":2000}},"required":["text"],"additionalProperties":false},"minItems":1,"maxItems":100},"start":{"type":"integer","minimum":0,"maximum":999}},"required":["type","notes"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"html"},"id":{"$ref":"#/components/schemas/Block/anyOf/0/properties/id"},"span":{"$ref":"#/components/schemas/Block/anyOf/0/properties/span"},"rowSpan":{"$ref":"#/components/schemas/Block/anyOf/0/properties/rowSpan"},"colStart":{"$ref":"#/components/schemas/Block/anyOf/0/properties/colStart"},"rowStart":{"$ref":"#/components/schemas/Block/anyOf/0/properties/rowStart"},"align":{"$ref":"#/components/schemas/Block/anyOf/0/properties/align"},"hidden":{"$ref":"#/components/schemas/Block/anyOf/0/properties/hidden"},"only":{"$ref":"#/components/schemas/Block/anyOf/0/properties/only"},"minHeight":{"$ref":"#/components/schemas/Block/anyOf/0/properties/minHeight"},"title":{"$ref":"#/components/schemas/Block/anyOf/0/properties/title"},"caption":{"$ref":"#/components/schemas/Block/anyOf/0/properties/caption"},"html":{"type":"string","maxLength":20000},"plain":{"type":"boolean"}},"required":["type","html"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"embed"},"id":{"$ref":"#/components/schemas/Block/anyOf/0/properties/id"},"span":{"$ref":"#/components/schemas/Block/anyOf/0/properties/span"},"rowSpan":{"$ref":"#/components/schemas/Block/anyOf/0/properties/rowSpan"},"colStart":{"$ref":"#/components/schemas/Block/anyOf/0/properties/colStart"},"rowStart":{"$ref":"#/components/schemas/Block/anyOf/0/properties/rowStart"},"align":{"$ref":"#/components/schemas/Block/anyOf/0/properties/align"},"hidden":{"$ref":"#/components/schemas/Block/anyOf/0/properties/hidden"},"only":{"$ref":"#/components/schemas/Block/anyOf/0/properties/only"},"minHeight":{"$ref":"#/components/schemas/Block/anyOf/0/properties/minHeight"},"title":{"$ref":"#/components/schemas/Block/anyOf/0/properties/title"},"caption":{"$ref":"#/components/schemas/Block/anyOf/0/properties/caption"},"url":{"type":"string","format":"uri"},"height":{"type":"integer","minimum":120,"maximum":1600}},"required":["type","url"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"divider"},"id":{"$ref":"#/components/schemas/Block/anyOf/0/properties/id"},"span":{"$ref":"#/components/schemas/Block/anyOf/0/properties/span"},"rowSpan":{"$ref":"#/components/schemas/Block/anyOf/0/properties/rowSpan"},"colStart":{"$ref":"#/components/schemas/Block/anyOf/0/properties/colStart"},"rowStart":{"$ref":"#/components/schemas/Block/anyOf/0/properties/rowStart"},"align":{"$ref":"#/components/schemas/Block/anyOf/0/properties/align"},"hidden":{"$ref":"#/components/schemas/Block/anyOf/0/properties/hidden"},"only":{"$ref":"#/components/schemas/Block/anyOf/0/properties/only"},"minHeight":{"$ref":"#/components/schemas/Block/anyOf/0/properties/minHeight"},"label":{"type":"string","maxLength":160},"variant":{"type":"string","enum":["rule","dots"]}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"spacer"},"id":{"$ref":"#/components/schemas/Block/anyOf/0/properties/id"},"span":{"$ref":"#/components/schemas/Block/anyOf/0/properties/span"},"rowSpan":{"$ref":"#/components/schemas/Block/anyOf/0/properties/rowSpan"},"colStart":{"$ref":"#/components/schemas/Block/anyOf/0/properties/colStart"},"rowStart":{"$ref":"#/components/schemas/Block/anyOf/0/properties/rowStart"},"align":{"$ref":"#/components/schemas/Block/anyOf/0/properties/align"},"hidden":{"$ref":"#/components/schemas/Block/anyOf/0/properties/hidden"},"only":{"$ref":"#/components/schemas/Block/anyOf/0/properties/only"},"minHeight":{"$ref":"#/components/schemas/Block/anyOf/0/properties/minHeight"},"size":{"type":"string","enum":["sm","md","lg","xl"]}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"columns"},"id":{"$ref":"#/components/schemas/Block/anyOf/0/properties/id"},"span":{"$ref":"#/components/schemas/Block/anyOf/0/properties/span"},"rowSpan":{"$ref":"#/components/schemas/Block/anyOf/0/properties/rowSpan"},"colStart":{"$ref":"#/components/schemas/Block/anyOf/0/properties/colStart"},"rowStart":{"$ref":"#/components/schemas/Block/anyOf/0/properties/rowStart"},"align":{"type":"string","enum":["start","center","stretch"]},"hidden":{"$ref":"#/components/schemas/Block/anyOf/0/properties/hidden"},"only":{"$ref":"#/components/schemas/Block/anyOf/0/properties/only"},"minHeight":{"$ref":"#/components/schemas/Block/anyOf/0/properties/minHeight"},"title":{"$ref":"#/components/schemas/Block/anyOf/0/properties/title"},"caption":{"$ref":"#/components/schemas/Block/anyOf/0/properties/caption"},"columns":{"type":"array","items":{"type":"object","properties":{"span":{"$ref":"#/components/schemas/Span"},"blocks":{"type":"array","items":{"$ref":"#/components/schemas/LeafBlock"},"minItems":1,"maxItems":24}},"required":["blocks"],"additionalProperties":false},"minItems":2,"maxItems":4},"gap":{"type":"string","enum":["sm","md","lg"]}},"required":["type","columns"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"tabs"},"id":{"$ref":"#/components/schemas/Block/anyOf/0/properties/id"},"span":{"$ref":"#/components/schemas/Block/anyOf/0/properties/span"},"rowSpan":{"$ref":"#/components/schemas/Block/anyOf/0/properties/rowSpan"},"colStart":{"$ref":"#/components/schemas/Block/anyOf/0/properties/colStart"},"rowStart":{"$ref":"#/components/schemas/Block/anyOf/0/properties/rowStart"},"align":{"$ref":"#/components/schemas/Block/anyOf/0/properties/align"},"hidden":{"$ref":"#/components/schemas/Block/anyOf/0/properties/hidden"},"only":{"$ref":"#/components/schemas/Block/anyOf/0/properties/only"},"minHeight":{"$ref":"#/components/schemas/Block/anyOf/0/properties/minHeight"},"title":{"$ref":"#/components/schemas/Block/anyOf/0/properties/title"},"caption":{"$ref":"#/components/schemas/Block/anyOf/0/properties/caption"},"tabs":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string","maxLength":80},"blocks":{"$ref":"#/components/schemas/Block/anyOf/34/properties/columns/items/properties/blocks"}},"required":["label","blocks"],"additionalProperties":false},"minItems":2,"maxItems":10}},"required":["type","tabs"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"accordion"},"id":{"$ref":"#/components/schemas/Block/anyOf/0/properties/id"},"span":{"$ref":"#/components/schemas/Block/anyOf/0/properties/span"},"rowSpan":{"$ref":"#/components/schemas/Block/anyOf/0/properties/rowSpan"},"colStart":{"$ref":"#/components/schemas/Block/anyOf/0/properties/colStart"},"rowStart":{"$ref":"#/components/schemas/Block/anyOf/0/properties/rowStart"},"align":{"$ref":"#/components/schemas/Block/anyOf/0/properties/align"},"hidden":{"$ref":"#/components/schemas/Block/anyOf/0/properties/hidden"},"only":{"$ref":"#/components/schemas/Block/anyOf/0/properties/only"},"minHeight":{"$ref":"#/components/schemas/Block/anyOf/0/properties/minHeight"},"title":{"$ref":"#/components/schemas/Block/anyOf/0/properties/title"},"caption":{"$ref":"#/components/schemas/Block/anyOf/0/properties/caption"},"items":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string","maxLength":200},"summary":{"type":"string","maxLength":300},"open":{"type":"boolean"},"tone":{"$ref":"#/components/schemas/Tone"},"blocks":{"$ref":"#/components/schemas/Block/anyOf/34/properties/columns/items/properties/blocks"}},"required":["label","blocks"],"additionalProperties":false},"minItems":1,"maxItems":40}},"required":["type","items"],"additionalProperties":false}]},"LeafBlock":{"anyOf":[{"$ref":"#/components/schemas/Block/anyOf/0"},{"$ref":"#/components/schemas/Block/anyOf/1"},{"$ref":"#/components/schemas/Block/anyOf/2"},{"$ref":"#/components/schemas/Block/anyOf/3"},{"$ref":"#/components/schemas/Block/anyOf/4"},{"$ref":"#/components/schemas/Block/anyOf/5"},{"$ref":"#/components/schemas/Block/anyOf/6"},{"$ref":"#/components/schemas/Block/anyOf/7"},{"$ref":"#/components/schemas/Block/anyOf/8"},{"$ref":"#/components/schemas/Block/anyOf/9"},{"$ref":"#/components/schemas/Block/anyOf/10"},{"$ref":"#/components/schemas/Block/anyOf/11"},{"$ref":"#/components/schemas/Block/anyOf/12"},{"$ref":"#/components/schemas/Block/anyOf/13"},{"$ref":"#/components/schemas/Block/anyOf/14"},{"$ref":"#/components/schemas/Block/anyOf/15"},{"$ref":"#/components/schemas/Block/anyOf/16"},{"$ref":"#/components/schemas/Block/anyOf/17"},{"$ref":"#/components/schemas/Block/anyOf/18"},{"$ref":"#/components/schemas/Block/anyOf/19"},{"$ref":"#/components/schemas/Block/anyOf/20"},{"$ref":"#/components/schemas/Block/anyOf/21"},{"$ref":"#/components/schemas/Block/anyOf/22"},{"$ref":"#/components/schemas/Block/anyOf/23"},{"$ref":"#/components/schemas/Block/anyOf/24"},{"$ref":"#/components/schemas/Block/anyOf/25"},{"$ref":"#/components/schemas/Block/anyOf/26"},{"$ref":"#/components/schemas/Block/anyOf/27"},{"$ref":"#/components/schemas/Block/anyOf/28"},{"$ref":"#/components/schemas/Block/anyOf/29"},{"$ref":"#/components/schemas/Block/anyOf/30"},{"$ref":"#/components/schemas/Block/anyOf/31"},{"$ref":"#/components/schemas/Block/anyOf/32"},{"$ref":"#/components/schemas/Block/anyOf/33"}]},"Cell":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"null"},{"type":"object","properties":{"value":{"type":["string","number","null"]},"tone":{"$ref":"#/components/schemas/Tone"},"badge":{"type":"boolean"},"spark":{"type":"array","items":{"type":"number"},"maxItems":200},"href":{"type":"string","format":"uri"},"bar":{"type":"number","minimum":0,"maximum":1}},"required":["value"],"additionalProperties":false}]},"Tone":{"type":"string","enum":["neutral","positive","warning","danger","info","accent"]},"Layout":{"type":"string","enum":["grid","report"]},"Slug":{"type":"string","minLength":1,"maxLength":80,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"},"Span":{"type":"integer","minimum":1,"maximum":24},"RowSpan":{"type":"integer","minimum":1,"maximum":24},"DashboardSpec":{"type":"object","properties":{"slug":{"$ref":"#/components/schemas/Slug"},"title":{"$ref":"#/components/schemas/StoredDashboard/properties/title"},"subtitle":{"$ref":"#/components/schemas/StoredDashboard/properties/subtitle"},"order":{"$ref":"#/components/schemas/StoredDashboard/properties/order"},"tone":{"$ref":"#/components/schemas/StoredDashboard/properties/tone"},"group":{"$ref":"#/components/schemas/StoredDashboard/properties/group"},"groupOrder":{"$ref":"#/components/schemas/StoredDashboard/properties/groupOrder"},"layout":{"$ref":"#/components/schemas/StoredDashboard/properties/layout"},"kortix":{"$ref":"#/components/schemas/StoredDashboard/properties/kortix"},"meta":{"$ref":"#/components/schemas/StoredDashboard/properties/meta"},"highlights":{"$ref":"#/components/schemas/StoredDashboard/properties/highlights"},"sections":{"$ref":"#/components/schemas/StoredDashboard/properties/sections"},"footer":{"$ref":"#/components/schemas/StoredDashboard/properties/footer"},"generatedAt":{"$ref":"#/components/schemas/StoredDashboard/properties/generatedAt"}},"required":["slug","title","sections"],"additionalProperties":false},"DashboardSummary":{"type":"object","description":"What the index page shows for one dashboard, without its blocks.","properties":{"slug":{"type":"string"},"title":{"type":"string"},"subtitle":{"type":"string"},"tone":{"$ref":"#/components/schemas/Tone"},"group":{"type":"string","description":"Category the card is filed under on the index."},"groupOrder":{"type":"integer","description":"Where the CATEGORY sits. A category's position is the lowest groupOrder any of its members declares; categories without one come last, alphabetically. Use sparse weights (1000, 2000, 3000) so a category can be inserted at a midpoint without renumbering the index."},"order":{"type":"integer","description":"Where this card sits INSIDE its category. Lower first, ties on title, absent sorts last. Use sparse weights (1000, 2000, 3000): inserting between 1000 and 2000 is 1500 and touches one document, where consecutive integers force renumbering every card after it."},"highlights":{"type":"array","description":"The figures shown on the card. Empty rather than absent when there are none.","items":{"type":"object","properties":{"label":{"type":"string"},"value":{},"tone":{"$ref":"#/components/schemas/Tone"}},"required":["label","value"]}},"sectionCount":{"type":"integer"},"blockCount":{"type":"integer"},"updatedAt":{"type":"string","format":"date-time","description":"When it was last published."},"generatedAt":{"type":"string","format":"date-time","description":"When the DATA is from, which is not the same as when it was published."}},"required":["slug","title","highlights","sectionCount","blockCount","updatedAt"]},"DashboardAccess":{"type":"object","description":"Who may open one dashboard. Only meaningful on a deployment that identifies its viewers.","properties":{"visibility":{"type":"string","enum":["private","project","restricted"],"description":"`private` is the owner alone, and the default when a PERSON publishes. `restricted` is the owner plus the lists below. `project` is any viewer — the default when an AGENT publishes (no session means no owner, and a private dashboard with no owner is readable by nobody), and what every dashboard published before this existed already reads as."},"owner_user_id":{"type":["string","null"],"description":"The Kortix user who published it. Stamped once at creation and never taken from a spec. Omit on a PUT to keep the current owner; send null to clear it."},"member_ids":{"type":"array","items":{"type":"string"},"description":"Kortix user ids that may open a `restricted` dashboard."},"group_ids":{"type":"array","items":{"type":"string"},"description":"Kortix group ids that may open it. A viewer in any one of them is in."}},"required":["visibility"]},"PublishResult":{"type":"object","properties":{"dashboard":{"$ref":"#/components/schemas/DashboardSummary"},"url":{"type":"string","description":"Where a human can read it.","examples":["/d/ripple-sentiment"]}},"required":["dashboard","url"]},"EditResult":{"type":"object","properties":{"dashboard":{"$ref":"#/components/schemas/DashboardSummary"},"url":{"type":"string"},"applied":{"type":"integer","description":"How many operations ran."},"spec":{"allOf":[{"$ref":"#/components/schemas/StoredDashboard"}],"description":"The whole updated document, so a follow-up GET is unnecessary."}},"required":["dashboard","url","applied","spec"]},"Error":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, in a sentence."},"detail":{"type":"string","description":"Present when there is something useful to add."}},"required":["error"]},"ValidationError":{"type":"object","description":"A rejected document. `issues` are paths into what you sent — fix the field each one names rather than re-sending the same body.","properties":{"error":{"type":"string"},"issues":{"type":"array","items":{"type":"string","examples":["sections.0.blocks.2.tone: Required"]}}},"required":["error","issues"]}}}}