# RoofKit Docs ## Guides ### Start - [Getting Started](https://docs.roofkit.ai/index.md): Set up the RoofKit surface that matches the contractor workflow: public visualizer, embeds, attribution, reports, and API handoff. - [Builder and Landings](https://docs.roofkit.ai/builder-landings.md): Manage landing pages, public links, embed install options, copy, style, step order, and landing-specific routes. - [Public Visualizer](https://docs.roofkit.ai/public-visualizer.md): Open homeowner-facing roof visualization flows through platform URLs, custom domains, landing slugs, and embedded iframe routes. ### Install - [Embeds](https://docs.roofkit.ai/embeds.md): Install RoofKit on contractor websites with a floating button widget or an inline iframe that forwards attribution and deep-link parameters. - [Deep Links](https://docs.roofkit.ai/deep-links.md): Preselect brand, material, shape, and color before a homeowner starts the public visualizer. - [Custom Domains](https://docs.roofkit.ai/custom-domains.md): Serve public landing pages from contractor-owned domains while preserving landing paths and supported query parameters. - [Roof Catalogs and Libraries](https://docs.roofkit.ai/roof-catalogs.md): Understand material ids, shape keys, color ids, library slugs, and how active libraries affect public choices. ### Operate - [Leads and Attribution](https://docs.roofkit.ai/leads-attribution.md): Capture homeowner intent, preserve marketing context, and connect public visualizer activity to operational lead workflows. - [Reports and Measurements](https://docs.roofkit.ai/reports-measurements.md): Use RoofKit report workflows to review roof measurement artifacts, optimize takeoff details, and share production-ready outputs. - [Team and Workspaces](https://docs.roofkit.ai/team-workspaces.md): Manage workspace access, invitations, roles, permissions, and operational boundaries for contractor teams. ### Support - [Troubleshooting](https://docs.roofkit.ai/troubleshooting.md): Common install and runtime checks for embeds, custom domains, deep links, lead capture, and Partner API usage. ## API reference ### Get started - [Partner API](https://docs.roofkit.ai/api-reference/introduction.md): Call the RoofKit Partner API v1 from your server with a workspace API key. - [Roof report requests](https://docs.roofkit.ai/api-reference/report-requests.md): Order a roof measurement report from a property address and read the measurements, the PDF, and the 3D model of the house. ### Foundation - [Verify API key](https://docs.roofkit.ai/api-reference/foundation/verify-api-key.md): Returns safe metadata for the authenticated API key and bound workspace. ### Leads - [List leads](https://docs.roofkit.ai/api-reference/leads/list-leads.md): Lists active leads for incremental CRM sync. One page holds at most limit leads (up to 100) and reads at most 1,000 leads, or 250 when a conversion_type or communication_channel filter is set. A page can hold fewer leads than limit, or none, while has_more is true. Request again with next_cursor unt… - [Create or update lead](https://docs.roofkit.ai/api-reference/leads/create-or-update-lead.md): Creates a lead or updates the matching active lead. external_id plus external_source wins when provided; otherwise normalized phone dedupe is used as fallback. - [Export leads](https://docs.roofkit.ai/api-reference/leads/export-leads.md): Exports formula-safe CSV using the same filters as list leads. One response holds at most 500 leads, or 250 when a conversion_type or communication_channel filter is set. A response can hold fewer, or none, while more leads follow. When X-Export-Truncated is true, request again with the cursor from… - [Get lead](https://docs.roofkit.ai/api-reference/leads/get-lead.md): Returns one active lead by public lead id. - [Patch lead](https://docs.roofkit.ai/api-reference/leads/patch-lead.md): Updates editable lead fields, pipeline stage, attribution overrides, and contact snapshots. - [Delete lead](https://docs.roofkit.ai/api-reference/leads/delete-lead.md): Soft deletes an active lead. - [List lead conversions](https://docs.roofkit.ai/api-reference/leads/list-lead-conversions.md): Returns public conversion snapshots without automation diagnostics. - [Create lead conversion](https://docs.roofkit.ai/api-reference/leads/create-lead-conversion.md): Creates a public conversion snapshot. This does not dispatch automations or webhooks. - [Get lead roof](https://docs.roofkit.ai/api-reference/leads/get-lead-roof.md): Returns public roof detail selections and generated image URLs for the lead. ### Reports - [List reports](https://docs.roofkit.ai/api-reference/reports/list-reports.md): Lists active measurement reports for incremental partner sync. - [Import report](https://docs.roofkit.ai/api-reference/reports/import-report.md): Imports one standalone PDF or a legacy XML/CSV/XLSX/DXF report package. The API key supplies the workspace; tenant selector fields are rejected. - [Get report](https://docs.roofkit.ai/api-reference/reports/get-report.md): Returns one active report and its export artifact metadata. - [Export report](https://docs.roofkit.ai/api-reference/reports/export-report.md): Generates a report export from the requested revision, or from the approved/current fallback revision when revision_id is omitted. PDF exports require `reports.export_pdf`; technical formats require `reports.export_technical`. - [Get report export](https://docs.roofkit.ai/api-reference/reports/get-report-export.md): Returns export artifact metadata and the public download endpoint. - [Download report export](https://docs.roofkit.ai/api-reference/reports/download-report-export.md): Redirects to the storage URL of the export artifact. The storage URL is not signed and does not expire, so treat it as a secret and request this endpoint again instead of storing it. - [Create report request](https://docs.roofkit.ai/api-reference/reports/create-report-request.md): Creates a roof measurement report from a property address and starts the RoofKit AI measurement. The answer is 202 at once. A report takes about 15 minutes. Poll the request, or subscribe a workspace webhook endpoint to `report_request.ready`, then read the measurements, the PDF and the 3D model. A… - [Get report request](https://docs.roofkit.ai/api-reference/reports/get-report-request.md): Returns the status of a report request. While `status` is `preparing` the AI measures the roof. `needs_attention` means the report waits for the workspace team in RoofKit, for example to draw the outline. Once `ready`, the body carries the measurements, the PDF metadata with its download route, and… - [Download report request 3D model](https://docs.roofkit.ai/api-reference/reports/download-report-request-3d-model.md): Redirects to the GLB (binary glTF) of the house, with the walls, the roof with its finish, the trim, the gutters and the openings. The storage URL is not signed and does not expire, so treat it as a secret and request this endpoint again instead of storing it. ### Visualizer - [Create visualization](https://docs.roofkit.ai/api-reference/visualizer/create-visualization.md): Creates a pending Sales Visualizer row for the key-bound workspace. Partner callers cannot submit tenant selectors or completed image URLs. - [Get visualization](https://docs.roofkit.ai/api-reference/visualizer/get-visualization.md): Returns one active Sales Visualizer row by id for the key-bound workspace. - [Generate visualization](https://docs.roofkit.ai/api-reference/visualizer/generate-visualization.md): Reserves one billable visualization attempt, runs the existing AI generation pipeline, stores the generated image, and completes the canonical row. - [List session visualizations](https://docs.roofkit.ai/api-reference/visualizer/list-session-visualizations.md): Lists Sales Visualizer rows for a session, including pending, processing, failed, and completed states. - [Create share link](https://docs.roofkit.ai/api-reference/visualizer/create-share-link.md): Creates a public share link for a completed Sales Visualizer row in the key-bound workspace. - [Get share link](https://docs.roofkit.ai/api-reference/visualizer/get-share-link.md): Public rate-limited read for a share-link token. This endpoint does not require a Partner API key. - [Create upload session](https://docs.roofkit.ai/api-reference/visualizer/create-upload-session.md): Creates a RoofKit-hosted photo upload link for one homeowner photo. Share the returned `url` with the homeowner as a normal link. The link opens a RoofKit page, never an iframe. When the homeowner uploads a photo, RoofKit removes the photo metadata, stores the photo privately, and starts one billabl… - [Get upload session](https://docs.roofkit.ai/api-reference/visualizer/get-upload-session.md): Returns the status of a hosted upload session. `url` is present only while the session waits for its photo. After the upload, `visualization` carries the Sales Visualizer row. Its image fields are API paths that need the same API key, never storage URLs. - [Get visualization image](https://docs.roofkit.ai/api-reference/visualizer/get-visualization-image.md): Streams one image of a Sales Visualizer row as bytes. The response never redirects to storage. `processed` returns the completed render. `original` returns the homeowner photo and is served only for hosted upload visualizations. A hosted upload image is served only to the API key that created the up… ### Budget Estimates - [Create budget estimate](https://docs.roofkit.ai/api-reference/estimates/create-budget-estimate.md): Runs the RoofKit Budget Estimate for a property address with the pricing of the key-bound workspace. RoofKit measures the roof from satellite data and charges the workspace once per estimate. The call is synchronous and can take up to two minutes. A `fallback` status has no usable roof area and must… - [Get budget estimate](https://docs.roofkit.ai/api-reference/estimates/get-budget-estimate.md): Returns a saved Budget Estimate in the create response shape. Only the API key that created the estimate can read it. ### Attribution - [List lead sources](https://docs.roofkit.ai/api-reference/attribution/list-lead-sources.md): Lists first-touch attribution source groups for the key-bound workspace. - [Get lead source](https://docs.roofkit.ai/api-reference/attribution/get-lead-source.md): Returns one source row and its campaign breakdown for the selected range. - [List campaigns](https://docs.roofkit.ai/api-reference/attribution/list-campaigns.md): Lists first-touch attribution campaign groups for the key-bound workspace. - [Get campaign metrics](https://docs.roofkit.ai/api-reference/attribution/get-campaign-metrics.md): Returns one campaign row and its source breakdown for the selected range. - [Track page view](https://docs.roofkit.ai/api-reference/attribution/track-page-view.md): Records a partner-supplied page view when the consent policy allows measurement. - [Track form submission](https://docs.roofkit.ai/api-reference/attribution/track-form-submission.md): Records a form submission and upserts a lead when email or phone is present. Consent policy can omit analytics recording. ### Pipeline - [List pipeline stages](https://docs.roofkit.ai/api-reference/pipeline/list-pipeline-stages.md): Lists active lead pipeline stages for the key-bound workspace. ### Data Objects - [List objects](https://docs.roofkit.ai/api-reference/objects/list-objects.md): Lists every Data Object the API key can access. Clients discover ids, slugs, and supported operations here. Do not send tenant selectors. - [Create object](https://docs.roofkit.ai/api-reference/objects/create-object.md): Creates a custom Data Object from a template. Requires the data_tables plan entitlement. Built-in Contacts and Reports stay on their native modules. - [List trashed objects](https://docs.roofkit.ai/api-reference/objects/list-trashed-objects.md): Lists archived custom objects and archived custom records for restore. Schema restore also needs data_objects.schema.manage on the key. - [Get object](https://docs.roofkit.ai/api-reference/objects/get-object.md): Returns one object plus its schema, views, and relationships. object_id accepts system:leads, system:reports, a UUID, or a slug. Reports also require reports.read. - [Update object](https://docs.roofkit.ai/api-reference/objects/update-object.md): Updates custom object metadata. Built-in tables reject metadata writes with FORBIDDEN and an operation detail. - [Get object schema](https://docs.roofkit.ai/api-reference/objects/get-object-schema.md): Same payload as Get object. Use this path when the client wants a schema-only URL. - [Save object schema](https://docs.roofkit.ai/api-reference/objects/save-object-schema.md): Saves field drafts, archived fields, and attribute order for a custom object. Omitted record values are not this contract. Contacts status options can update through this path. - [Archive object](https://docs.roofkit.ai/api-reference/objects/archive-object.md): Soft-archives a custom table. Built-in tables including Opportunities return 409 with operation archive_object. No JSON body is required. - [Restore object](https://docs.roofkit.ai/api-reference/objects/restore-object.md): Restores an archived custom table. Table limit still applies. No JSON body is required. - [List object records](https://docs.roofkit.ai/api-reference/objects/list-object-records.md): Lists records for one object. Pagination uses limit, next_cursor, and has_more. Request again with next_cursor until has_more is false. A custom object read without search, in created_at or updated_at order, follows a keyset cursor and returns every record exactly once. The default order is created_… - [Create object record](https://docs.roofkit.ai/api-reference/objects/create-object-record.md): Creates a custom record. Contacts and Reports reject create with FORBIDDEN and operation create_record. - [Get object record](https://docs.roofkit.ai/api-reference/objects/get-object-record.md): Returns one record. Missing or unlistable rows return 404. - [Patch object record](https://docs.roofkit.ai/api-reference/objects/patch-object-record.md): Partial update. Omitted attributes stay unchanged. Contacts also require leads.write. Locked or read-only fields return 400 or 403 with operation update_record. - [Archive object record](https://docs.roofkit.ai/api-reference/objects/archive-object-record.md): Soft-archives a custom record. Contacts and Reports reject archive. No JSON body is required. - [Restore object record](https://docs.roofkit.ai/api-reference/objects/restore-object-record.md): Restores an archived custom record. Unique field collisions return 409. No JSON body is required. - [List inbound relationships](https://docs.roofkit.ai/api-reference/objects/list-inbound-relationships.md): Lists inbound links that point at this record. Reports sources also need reports.read. - [Link object records](https://docs.roofkit.ai/api-reference/objects/link-object-records.md): Links the path record as the source to a target record. Cardinality and access checks apply. - [Search relation targets](https://docs.roofkit.ai/api-reference/objects/search-relation-targets.md): Searches records that can be linked as relation targets for this object. - [Export object records](https://docs.roofkit.ai/api-reference/objects/export-object-records.md): Exports formula-safe CSV for the object. A custom object export without search, in created_at or updated_at order, holds at most 1,000 records per response. Request again with next_cursor until has_more is false. Each response is a complete CSV with its own header row. To export a date range, pass a… - [Import object records](https://docs.roofkit.ai/api-reference/objects/import-object-records.md): Imports CSV into a custom object. Create-field mappings also need data_objects.schema.manage. Contacts and Reports reject import. - [Save object view](https://docs.roofkit.ai/api-reference/objects/save-object-view.md): Creates or updates a view for the object. Kanban views may seed Deal stages. - [Archive object view](https://docs.roofkit.ai/api-reference/objects/archive-object-view.md): Archives one view. The last remaining view cannot be archived. No JSON body is required. - [Unlink object records](https://docs.roofkit.ai/api-reference/objects/unlink-object-records.md): Removes one relationship row. No JSON body is required. ## MCP ### Get started - [RoofKit MCP](https://docs.roofkit.ai/mcp-server.md): Connect Claude, ChatGPT, Codex, Cursor, or Claude Code to your RoofKit workspace with OAuth. Install, authorize, render roofs, run estimates, and revoke access. ### Tools - [Contacts and Data Objects](https://docs.roofkit.ai/mcp-server/tools/contacts-and-data-objects.md): The RoofKit MCP tools for Contacts and Data Objects, with their access, kind, and arguments. - [Roof reports](https://docs.roofkit.ai/mcp-server/tools/roof-reports.md): The RoofKit MCP tools for Roof reports, with their access, kind, and arguments. - [Roof renders and estimates](https://docs.roofkit.ai/mcp-server/tools/renders-and-estimates.md): The RoofKit MCP tools for Roof renders and estimates, with their access, kind, and arguments. - [Analytics and attribution](https://docs.roofkit.ai/mcp-server/tools/analytics-and-attribution.md): The RoofKit MCP tools for Analytics and attribution, with their access, kind, and arguments. - [Sites and branding](https://docs.roofkit.ai/mcp-server/tools/sites-and-branding.md): The RoofKit MCP tools for Sites and branding, with their access, kind, and arguments. - [Automations and jobs](https://docs.roofkit.ai/mcp-server/tools/automations-and-jobs.md): The RoofKit MCP tools for Automations and jobs, with their access, kind, and arguments. - [Workspace and billing](https://docs.roofkit.ai/mcp-server/tools/workspace-and-billing.md): The RoofKit MCP tools for Workspace and billing, with their access, kind, and arguments. - [Calls and connectors](https://docs.roofkit.ai/mcp-server/tools/calls-and-connectors.md): The RoofKit MCP tools for Calls and connectors, with their access, kind, and arguments. ## OpenAPI Specs - [openapi](/api-reference/openapi.yaml) > The links below point to documentation indexes. Follow each `/_llms/` index recursively until you reach documentation pages. ## Indexes - [Spanish (82 pages)](https://docs.roofkit.ai/_llms/es.txt): Documentation for Spanish. This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.