Upload a supplied logo or image
With Reports: write, usereports_upload_image to ingest a user-supplied public HTTPS URL or canonical base64 image bytes. PNG, JPEG and WebP are supported, up to 1MB. The server validates public DNS and every redirect, checks the image’s actual format and decodability, and stores the original bytes in the selected workspace.
For a URL, supply request.version=1 and request.source={"kind":"url","url":"https://example.com/logo.png"}, plus a stable UUID idempotencyKey. For bytes, use source.kind=base64, source.mimeType and source.data. An optional expectedSha256 pins the exact file. Preserve the same command and key after an uncertain response. Completed retries read the stored asset rather than fetching the URL again; conflicting commands or changed reserved bytes are rejected.
The result includes assetId, filePath, dimensions, format, byte size, alpha information and SHA-256. Bind an image element through settings.assetId, use contain fitting and preserve its aspect ratio. Do not put this ID in settings.logoId: workspace logos and uploaded report images are distinct resources. Upload before sealing the authoring change set. This tool returns metadata rather than image previews and does not change workspace branding, report content, Data, sharing or PDF state.
Read the native design first
Usereports_get_authoring_context to confirm the selected workspace, accessible logo IDs and dimensions, approved fonts, current authoring availability and the versioned guide. Follow its logo cursor. Prefer an appropriate workspace logo, report label, consistent shared header and numbered footer across logical pages; keep cover and distinct-purpose exceptions explicit.
reports_get returns the native manifest and exact revision/hash, including page and element-set hashes. Report lists default to 50 and accept at most 100 reports per page. Read reports_get_configuration for the complete layout/print settings, theme, controls, parameters, semantic definitions, policy and composition intent. Read reports_get_page for each native page and every element’s rich text, configuration, styles, bindings, interactions and freeform/responsive placements.
These reads preserve native fields in lossless JSON records. A response is bounded to 1 MiB and at most 100 records; large values span chunks of at most 65,536 characters. A large native page envelope sets pageInRecords=true and supplies its full value in page records. Group records by kind, ID and value hash, concatenate JSON chunks in index order, require every declared chunk and then parse and validate the complete value against its capability schema. Follow the cursor until exhausted. Cursors bind the actor, delegation, report revision/hash, selection and record-set identity. Changed content or independent metadata requires a fresh read. Content is never silently shortened.
Optional effective configuration uses the same outer-surface style resolver as the viewer and identifies element, theme and native-default origins. Its declared exclusions include inner-component inheritance, rich-text run overrides, resolved responsive geometry and measured bounds. This metadata is separate from rendered assessment evidence.
reports_list_data_sources returns independently authorized attachment/version definitions, catalogues and source/output identities. Blend inputs are checked recursively. Historical version records withhold newer current-output metadata. Definitions remain in the separate Data feature, and none of these reads executes or refreshes a query. Current Data consent, query/connection permissions, network policy and asset references are rechecked.
Use reports_get_publication_state to compare private document/current Data identities with existing shares. Missing artifacts, invalid manifests, legacy metadata, revoked/expired shares and different identities are explicit. Matching metadata does not validate the complete shared payload or rendering: payloadIntegrity remains not_assessed. This tool never creates or updates a share.
Stage native report changes
Staged authoring requires separately approved Reports: write, current report edit permission and workspace authoring availability. Stages are private to the authorizing account or connection and leave the saved report unchanged.- Discover the native configuration schemas and read the exact saved revision/hash. Use
reports_create_change_setwith authoring version 2, native document version 4 and a UUID retry key. - Use
reports_append_changesfor typed native pages, elements, content, styles, controls, semantic definitions, attachments and composition intent. Both freeform and responsive use their own native contracts. Each batch carries its ID, next sequence and the last confirmed cumulative hash. Preserve the entire batch on an uncertain retry; its ID is the retry key. - Use
reports_get_change_setto reconcile accepted sequence and receipts. References may be supplied across multiple batches, but must resolve before sealing. - Use
reports_seal_change_setat the confirmed cumulative hash to validate and freeze the complete native graph. A seal is not a rendered assessment or a saved-report commit. - Use
reports_discard_change_setat the confirmed hash to abandon an uncommitted stage. It does not delete the report or undo a completed commit.
Compose and commit the measured candidate
For a desktop shared report link, setcompositionIntent.deliveryTarget to desktop. The composer then certifies every logical page in private/shared desktop contexts. desktop_and_print also requires native PDF evidence; omission preserves that broader requirement. Desktop certification makes no PDF claim. Keep the finite qualityPolicy requirements for the requested delivery target.
Native V4 shared reports open at 100% to preserve authored readable type. Responsive layouts reflow to the reading area; freeform canvases retain their geometry with scrolling. Explicit viewer zoom and fit choices remain available.
Use authoring-context workspace logo IDs through settings.logoId; uploaded report assets use a separate assetId. Date definitions use date-range-control, while other selectors use report-control. Core bar/line/area/combo charts use a visualization_chart view with dimension and measure field IDs, or a matching explicit visualization specification. Section titles follow the authored theme typography, including in recipient delivery.
Measured composition also requires Reports: write and current edit permission. Keep Reports: read consent to poll the shared canvas job tools. Prepare existing readable Data outputs independently before composing; report permissions do not grant connection access or query execution.
- Use
reports_composewith the sealed change-set identity, exact saved revision/hash, declaredfixedorresponsivemode, profile, locale and timezone.composeplacement policy uses semantic relationships;preservemeasures intentional existing placements. Preserve the request and UUID idempotency key after an uncertain response. - Poll
reports_get_canvas_job. A successful composition returns an immutable plan ID, plan hash and candidate document hash. Cancellation fences late workers and leaves the saved report unchanged. - Use
reports_get_planto review required coverage, readiness and findings. Read placements bypageIdand followplacements.pageInfo.nextCursor. Followfindings.pageInfo.nextOffsetthrough every finding page and review each page’s required advisory IDs.currentInputsMatchis informational; commit checks the inputs again. - Use
reports_commit_planwith the exact plan hash, expected revision/document/dependency hashes and explicitly reviewed advisory IDs. Commit installs the assessed candidate in one transaction and returns its new revision and immutable receipt. A changed source, input or runtime requires a new composition; commit never rebases or adjusts layout. - Retry an uncertain commit with the identical plan, request and UUID key. The original receipt remains replayable after later report edits or temporary-plan cleanup. Publication remains a separate operation.
Find and assess the intended report
- Use
reports_listwith the exact workspace name and report search. FollowpageInfo.nextCursorwhen there are more results. - Use
reports_getfor the report’s current revision, document hash, native layout mode and page IDs. ConfirmassessmentSupportissaved_revision. Unsupported native documents and frozen legacy bundles are explicit. - Read
reports_get_capabilitiesfor supported contexts, profiles and guidance. Usereports_assesswith the discovered report ID, exact revision/hash, selected pages and contexts. Preserve one UUID idempotency key when retrying the same request. - Use
reports_get_canvas_jobuntil the job reaches a terminal state. A queued or running job is unfinished work. Usereports_cancel_canvas_jobto stop derived work when appropriate. - Read
reports_get_assessmentafter completion. Followfindings.pageInfo.nextOffsetto read every finding.
safeToCommit do not certify aesthetic quality or authorize a write.
Freeform, responsive and delivery contexts
The nativefixed mode is freeform. Responsive mode uses the report’s native layout and breakpoints. Contexts state the layout mode, viewport, canvas width, delivery scale, locale and timezone. Use a locale listed by reports_get_capabilities; regional aliases produce an explicit coverage gap when native formatting cannot be matched. Start with the saved defaults; arbitrary viewer-state scenarios are unsupported in this assessment release. Use private, shared-projection or print contexts only where their probes report complete evidence. Assessment of an independently saved shared artifact is not supported yet.
Capability discovery lists elementProbes for every native kind, including required evidence and the conditions under which it can be measured. Native rendering support does not imply complete assessment coverage. Straight solid/double dividers, rectangular fills and solid borders can provide paint evidence; masked, rounded or other unsupported paint returns an explicit gap. Check the completed assessment for the exact report and contexts.
For supported single-sheet text layouts, physical print evidence checks the exact ordered styled text against its printed fill colors as well as text ownership and bounds. Mixed text colors do not require screenshots. Unsupported effects and multi-sheet geometry remain explicit gaps; logical text continuity alone does not certify physical print layout.
Use reports_list_capabilities to discover native configuration contracts by family or element kind. Follow its cursor through the complete index. Use reports_get_capability_schema with the returned schema ID to inspect exact nested properties, enums, ranges, defaults and nullability. The root value property contains the configuration contract. Preserve its schemaHash when planning changes; an index cursor is bound to the index hash and chosen filters. Entries currently report authoringStatus: contract_only: configuration discovery does not by itself grant staged writes or measured commits. These generic schemas contain no saved report content, connector rows or credentials.
Assessments consume existing, readable, pinned cached outputs. They never execute a query, refresh data, set a schedule, autosave, freeze a report or publish a share. Missing or stale outputs remain separate from layout findings. Data connections and reusable queries remain in the Data feature.
Design guidance
Usereports_create with Reports write consent to create a private native empty draft in the declared freeform (fixed) or responsive mode. Choose an approved theme preset from reports_get_authoring_context, or supply a complete native theme. Initial page and print settings use their owning native schemas. Keep the same client report UUID, UUID retry key and original command after an uncertain response: an identical retry returns the original creation manifest even after later edits. Creation does not attach Data, execute providers, publish a report or certify layout. Continue through native change sets, measured composition and atomic commit.
The shared job tools are available with Reports read or write consent. Each job still requires its exact current family consent and report permission: read for assessment, write for composition. Preserve a UUID retry key when cancelling. Completion status is only progress; inspect the full assessment or plan before claiming success.
When planning a report, use the workspace logo where appropriate, the report label, a consistent header, and coherent footers with logical page numbers. Covers and distinct page purposes may have deliberate exceptions. Keep a small typography hierarchy, consistent margins and spacing, readable text, aligned related content, room for chart labels and table headings, and correct logo aspect ratios.
These tools discover and assess saved reports and, when separately enabled, stage, compose and commit native changes. Report publication through this connector remains unavailable. The assessor returns semantic evidence; it does not send screenshots or ask the assistant to nudge blocks. Composition is available only when its workspace feature and protected renderer are configured; these documentation contracts do not indicate activation in a particular workspace.
See Reports API for the HTTP contracts and connector capabilities for other supported workflows.