# Construction Site Visit Agent (/docs/receipes/construction-site-visit-agent)



This recipe tells an agent exactly how to build a construction site-visit workflow in andibase.

The workflow is designed for teams that need to review a project quote, field-visit photos and videos, client conversations, and site notes before confirming how an installation should be executed and which materials are required.

Goal [#goal]

Create five things in one workspace:

1. A `construction-project` data definition.
2. A `site-visit-input` data definition.
3. An `installation-plan` data definition.
4. A `material-list-item` data definition.
5. One agent that validates project readiness and creates the installation material list.

Expected outcome [#expected-outcome]

After following this recipe, the workspace should have:

* a `construction-project` definition for quote context, scope, and client-facing project details
* a `site-visit-input` definition for quote extracts, photo notes, video transcripts, and client conversation summaries
* an `installation-plan` definition for the validated installation approach
* a `material-list-item` definition for the proposed bill of materials
* a `construction-site-visit-agent` agent

Use the API documented in:

* [Data Model](/docs/data-model)
* [Get started (for AI Agents)](/docs/agent-get-started)
* [Data definitions API](/docs/api-reference/data-definitions)
* [Data API](/docs/api-reference/data)
* [Agents API](/docs/api-reference/agents)
* [Agent Tools](/docs/agent-tools)

Current runtime constraints [#current-runtime-constraints]

The current workspace agent runtime is strong at structured data workflows, but it does not guarantee direct browsing of arbitrary folders or native processing of raw photos, raw videos, or audio recordings unless those capabilities exist in the execution environment.

That means this recipe should:

* store project quote details in structured data
* ingest photos, videos, and client conversations as structured site-visit input rows, transcripts, or extracted notes
* generate an installation plan from those structured inputs
* create a high-confidence material list and clearly flag uncertainties instead of pretending every assumption is confirmed

If a future ingestion tool can extract text, frames, measurements, or transcripts from media files automatically, it can populate the same `site-visit-input` rows and the agent can use them without changing the workflow.

Agent instructions [#agent-instructions]

When an agent executes this recipe, it should follow these rules:

1. Create the `construction-project` definition first.
2. Create the `site-visit-input` definition second.
3. Create the `installation-plan` definition third.
4. Create the `material-list-item` definition fourth.
5. In the current API, data definition handles are generated from `name`. Use `name: "Construction Project"`, `name: "Site Visit Input"`, `name: "Installation Plan"`, and `name: "Material List Item"` so the created handles normalize to `construction-project`, `site-visit-input`, `installation-plan`, and `material-list-item`.
6. If your execution environment can resolve the created definition ids, you may use relationship fields. If it cannot, use text foreign keys such as `projectRecordId` and `planRecordId`, because the public HTTP API still expects `dataDefinitionId` for relationship fields.
7. Create the construction site-visit agent with instructions focused on scope validation, discrepancy detection, installation planning, and material-list creation.
8. Use the current agent tools. Do not claim that a photo, video, or conversation was fully processed unless the relevant evidence was actually available as structured input, extracted text, or transcript data.
9. If key evidence is missing or ambiguous, keep the installation plan in a blocked or review-needed state and record the unresolved questions.
10. Ask the user only when a missing choice materially changes installation feasibility, such as installation surface, access restrictions, electrical requirements, structural constraints, or quote scope.

Step 1: Create the data model [#step-1-create-the-data-model]

Create four data definitions: `construction-project`, `site-visit-input`, `installation-plan`, and `material-list-item`.

1\. Construction Project definition [#1-construction-project-definition]

Use `name: "Construction Project"`. The current API derives the handle from the name, so this will create the `construction-project` handle.

Recommended fields:

```json
{
  "name": "Construction Project",
  "description": "Tracks the quoted project scope, client context, and installation readiness.",
  "fields": {
    "projectName": {
      "name": "Project name",
      "type": "text"
    },
    "clientName": {
      "name": "Client name",
      "type": "text"
    },
    "quoteNumber": {
      "name": "Quote number",
      "type": "text"
    },
    "quoteVersion": {
      "name": "Quote version",
      "type": "text"
    },
    "siteAddress": {
      "name": "Site address",
      "type": "text"
    },
    "projectType": {
      "name": "Project type",
      "type": "select",
      "options": [
        { "value": "interior-fitout", "label": "Interior fit-out", "color": "blue" },
        { "value": "electrical", "label": "Electrical", "color": "amber" },
        { "value": "hvac", "label": "HVAC", "color": "cyan" },
        { "value": "networking", "label": "Networking", "color": "violet" },
        { "value": "security", "label": "Security", "color": "red" },
        { "value": "other", "label": "Other", "color": "zinc" }
      ]
    },
    "status": {
      "name": "Status",
      "type": "select",
      "options": [
        { "value": "intake", "label": "Intake", "color": "sky" },
        { "value": "reviewing-site-visit", "label": "Reviewing site visit", "color": "blue" },
        { "value": "needs-clarification", "label": "Needs clarification", "color": "amber" },
        { "value": "ready-for-materials", "label": "Ready for materials", "color": "green" },
        { "value": "blocked", "label": "Blocked", "color": "red" },
        { "value": "approved", "label": "Approved", "color": "emerald" }
      ]
    },
    "scopeSummary": {
      "name": "Scope summary",
      "type": "text",
      "variant": "long-text"
    },
    "clientConversationSummary": {
      "name": "Client conversation summary",
      "type": "text",
      "variant": "long-text"
    },
    "quotedSystems": {
      "name": "Quoted systems",
      "type": "json"
    },
    "budgetEstimate": {
      "name": "Budget estimate",
      "type": "number"
    },
    "targetInstallDate": {
      "name": "Target install date",
      "type": "date"
    },
    "assumptions": {
      "name": "Assumptions",
      "type": "json"
    },
    "openQuestions": {
      "name": "Open questions",
      "type": "json"
    }
  }
}
```

Recommended defaults for agent-created project rows:

* `status`: `intake`
* `quotedSystems`: `[]`
* `assumptions`: `[]`
* `openQuestions`: `[]`

2\. Site Visit Input definition [#2-site-visit-input-definition]

Use `name: "Site Visit Input"`. The current API derives the handle from the name, so this will create the `site-visit-input` handle.

Recommended fields:

```json
{
  "name": "Site Visit Input",
  "description": "Tracks structured evidence from quotes, photos, videos, measurements, and client conversations.",
  "fields": {
    "projectRecordId": {
      "name": "Project record id",
      "description": "Store the linked construction-project row id when the client only has public HTTP API access.",
      "type": "text"
    },
    "inputType": {
      "name": "Input type",
      "type": "select",
      "options": [
        { "value": "quote", "label": "Quote", "color": "blue" },
        { "value": "photo", "label": "Photo", "color": "green" },
        { "value": "video", "label": "Video", "color": "violet" },
        { "value": "conversation", "label": "Conversation", "color": "amber" },
        { "value": "measurement", "label": "Measurement", "color": "cyan" },
        { "value": "other", "label": "Other", "color": "zinc" }
      ]
    },
    "sourceName": {
      "name": "Source name",
      "type": "text"
    },
    "capturedBy": {
      "name": "Captured by",
      "type": "text"
    },
    "capturedAt": {
      "name": "Captured at",
      "type": "timestamp"
    },
    "processingStatus": {
      "name": "Processing status",
      "type": "select",
      "options": [
        { "value": "pending-review", "label": "Pending review", "color": "amber" },
        { "value": "reviewed", "label": "Reviewed", "color": "green" },
        { "value": "needs-transcript", "label": "Needs transcript", "color": "violet" },
        { "value": "needs-clarification", "label": "Needs clarification", "color": "red" }
      ]
    },
    "extractedText": {
      "name": "Extracted text",
      "type": "text",
      "variant": "long-text"
    },
    "observedDetails": {
      "name": "Observed details",
      "type": "text",
      "variant": "long-text"
    },
    "locationNote": {
      "name": "Location note",
      "type": "text"
    },
    "dimensions": {
      "name": "Dimensions",
      "type": "json"
    },
    "issuesFound": {
      "name": "Issues found",
      "type": "json"
    },
    "pendingReason": {
      "name": "Pending reason",
      "type": "text",
      "variant": "long-text"
    }
  }
}
```

Recommended defaults for ingested input rows:

* `processingStatus`: `pending-review`
* `dimensions`: `{}`
* `issuesFound`: `[]`

3\. Installation Plan definition [#3-installation-plan-definition]

Use `name: "Installation Plan"`. The current API derives the handle from the name, so this will create the `installation-plan` handle.

Recommended fields:

```json
{
  "name": "Installation Plan",
  "description": "Tracks the validated installation approach and readiness status for a construction project.",
  "fields": {
    "projectRecordId": {
      "name": "Project record id",
      "description": "Store the linked construction-project row id when the client only has public HTTP API access.",
      "type": "text"
    },
    "planTitle": {
      "name": "Plan title",
      "type": "text"
    },
    "readinessStatus": {
      "name": "Readiness status",
      "type": "select",
      "options": [
        { "value": "draft", "label": "Draft", "color": "zinc" },
        { "value": "review-needed", "label": "Review needed", "color": "amber" },
        { "value": "blocked", "label": "Blocked", "color": "red" },
        { "value": "ready-for-materials", "label": "Ready for materials", "color": "green" },
        { "value": "approved-for-installation", "label": "Approved for installation", "color": "emerald" }
      ]
    },
    "installationSummary": {
      "name": "Installation summary",
      "type": "text",
      "variant": "long-text"
    },
    "sitePreparation": {
      "name": "Site preparation",
      "type": "text",
      "variant": "long-text"
    },
    "accessRequirements": {
      "name": "Access requirements",
      "type": "text",
      "variant": "long-text"
    },
    "constraints": {
      "name": "Constraints",
      "type": "json"
    },
    "riskNotes": {
      "name": "Risk notes",
      "type": "json"
    },
    "unresolvedQuestions": {
      "name": "Unresolved questions",
      "type": "json"
    },
    "verificationChecklist": {
      "name": "Verification checklist",
      "type": "json"
    },
    "lastReviewedAt": {
      "name": "Last reviewed at",
      "type": "timestamp"
    }
  }
}
```

Recommended defaults for agent-created plan rows:

* `readinessStatus`: `draft`
* `constraints`: `[]`
* `riskNotes`: `[]`
* `unresolvedQuestions`: `[]`
* `verificationChecklist`: `[]`

4\. Material List Item definition [#4-material-list-item-definition]

Use `name: "Material List Item"`. The current API derives the handle from the name, so this will create the `material-list-item` handle.

Recommended fields:

```json
{
  "name": "Material List Item",
  "description": "Tracks proposed materials required to execute the validated installation plan.",
  "fields": {
    "planRecordId": {
      "name": "Plan record id",
      "description": "Store the linked installation-plan row id when the client only has public HTTP API access.",
      "type": "text"
    },
    "projectRecordId": {
      "name": "Project record id",
      "description": "Store the linked construction-project row id when the client only has public HTTP API access.",
      "type": "text"
    },
    "itemName": {
      "name": "Item name",
      "type": "text"
    },
    "category": {
      "name": "Category",
      "type": "select",
      "options": [
        { "value": "hardware", "label": "Hardware", "color": "blue" },
        { "value": "cabling", "label": "Cabling", "color": "violet" },
        { "value": "mounting", "label": "Mounting", "color": "amber" },
        { "value": "electrical", "label": "Electrical", "color": "red" },
        { "value": "safety", "label": "Safety", "color": "green" },
        { "value": "other", "label": "Other", "color": "zinc" }
      ]
    },
    "quantity": {
      "name": "Quantity",
      "type": "number"
    },
    "unit": {
      "name": "Unit",
      "type": "text"
    },
    "specification": {
      "name": "Specification",
      "type": "text",
      "variant": "long-text"
    },
    "purpose": {
      "name": "Purpose",
      "type": "text",
      "variant": "long-text"
    },
    "confidence": {
      "name": "Confidence",
      "type": "select",
      "options": [
        { "value": "confirmed", "label": "Confirmed", "color": "green" },
        { "value": "assumed", "label": "Assumed", "color": "amber" },
        { "value": "to-verify", "label": "To verify", "color": "red" }
      ]
    },
    "sourceReason": {
      "name": "Source reason",
      "type": "text",
      "variant": "long-text"
    },
    "itemStatus": {
      "name": "Item status",
      "type": "select",
      "options": [
        { "value": "proposed", "label": "Proposed", "color": "blue" },
        { "value": "approved", "label": "Approved", "color": "green" },
        { "value": "blocked", "label": "Blocked", "color": "red" }
      ]
    }
  }
}
```

Recommended defaults for agent-created material rows:

* `quantity`: `1`
* `confidence`: `assumed`
* `itemStatus`: `proposed`

If your client already has the created definition ids, you can replace the text foreign keys with relationship fields:

```json
{
  "projectId": {
    "name": "Project",
    "type": "relationship",
    "dataDefinitionId": "<construction-project-definition-id>"
  },
  "planId": {
    "name": "Plan",
    "type": "relationship",
    "dataDefinitionId": "<installation-plan-definition-id>"
  }
}
```

Step 2: Create the construction site-visit agent [#step-2-create-the-construction-site-visit-agent]

Create one workspace agent with handle `construction-site-visit-agent`.

Recommended behavior:

* review the project quote, field-visit inputs, and client conversation summaries together
* detect mismatches between quoted scope and site reality
* identify missing measurements, access issues, or dependencies before material planning
* create or update one installation plan per project
* generate material-list items only when the available evidence supports them
* mark uncertain materials as `assumed` or `to-verify` instead of pretending the list is perfect
* keep the project or plan in a clarification state when critical evidence is missing

Recommended agent payload:

```json
{
  "name": "Construction Site Visit Agent",
  "handle": "construction-site-visit-agent",
  "description": "Reviews project quotes and field-visit evidence to validate installation scope and build the material list.",
  "model": "openai/gpt-5.4",
  "capabilities": {
    "webAccess": false,
    "browserAccess": false,
    "objectsAccess": true
  },
  "instructions": "You manage a construction site-visit workflow. Use the construction-project, site-visit-input, installation-plan, and material-list-item data definitions as the source of truth. Be action-oriented: make reasonable assumptions, complete the work when the intended outcome is clear, and avoid asking for confirmation on every small step. Review the quote context, site-visit evidence, and client conversation notes together before deciding how installation should be executed. Detect scope gaps, contradictions, missing measurements, access constraints, and any client expectation that is not yet reflected in the quote or plan. Create or update the installation-plan row with a clear readinessStatus, installationSummary, constraints, and unresolvedQuestions. Create material-list-item rows only when the available inputs support them. If an item is inferred rather than confirmed, mark confidence as assumed or to-verify and explain the sourceReason. Do not pretend that raw photos, raw videos, or audio were processed unless the relevant extracted notes or transcripts are already available in site-visit-input. If critical evidence is missing, keep the plan in review-needed or blocked status instead of faking certainty."
}
```

Create the agent with `POST /api/v1/agents`.

Step 3: Recommended operating flow [#step-3-recommended-operating-flow]

Use this operating flow:

1. Load the quote and core client details into `construction-project`.
2. Ingest each photo, video, measurement, and client conversation summary into `site-visit-input`.
3. Ask the agent to review all project and input rows together.
4. The agent creates or updates the `installation-plan` and flags any contradictions or missing evidence.
5. The agent generates `material-list-item` rows from the validated plan, using confidence markers for any assumption that still needs confirmation.
6. If the plan is blocked or still unclear, the agent records unresolved questions before the team commits to the final material list.

Recommended acceptance checks [#recommended-acceptance-checks]

An agent should consider the recipe complete only if all of the following are true:

1. `construction-project` exists and includes the required fields.
2. `site-visit-input` exists and can represent quote details, photo notes, video transcripts, and client conversation summaries.
3. `installation-plan` exists and includes either the `projectId` relationship or the `projectRecordId` fallback used by the current public HTTP API flow.
4. `material-list-item` exists and includes either the `planId` relationship or the `planRecordId` fallback used by the current public HTTP API flow.
5. `construction-site-visit-agent` exists.
6. At least one sample project can be created with related site-visit inputs.
7. At least one installation plan can be created with a meaningful `readinessStatus`, `installationSummary`, and `unresolvedQuestions`.
8. At least one material item can be created with `confidence` and `sourceReason`.
9. The recipe makes it explicit that missing media extraction or missing transcripts must be marked as pending rather than silently ignored.

Minimal delivery summary [#minimal-delivery-summary]

When the agent finishes, it should report:

* the created data definition handles
* the created agent handle
* whether site-visit evidence was fully structured or still has pending extraction work
* any assumptions made about installation method, access, measurements, or material quantities


## Documentation Navigation
Use these paths to traverse the relevant docs and generated API reference files for the app.
- Construction Site Visit Agent [current] -> `/docs/receipes/construction-site-visit-agent` (source: `content/docs/receipes/construction-site-visit-agent.mdx`)
- andibase Overview -> `/docs` (source: `content/docs/index.mdx`)
- Get started (for AI Agents) -> `/docs/agent-get-started` (source: `content/docs/agent-get-started.mdx`)
- Agent Tools -> `/docs/agent-tools` (source: `content/docs/agent-tools.mdx`)
- Agents -> `/docs/agents` (source: `content/docs/agents.mdx`)
- Agent Auth -> `/docs/api-reference/agent-auth`
- Get agent login request -> `/docs/api-reference/agent-auth/get-api-v1-agent-auth-requests-usercode`
- Exchange agent login -> `/docs/api-reference/agent-auth/post-api-v1-agent-auth-exchange`
- Start agent login -> `/docs/api-reference/agent-auth/post-api-v1-agent-auth-requests`
- Approve agent login -> `/docs/api-reference/agent-auth/post-api-v1-agent-auth-requests-usercode-approve`
- Deny agent login -> `/docs/api-reference/agent-auth/post-api-v1-agent-auth-requests-usercode-deny`
- Agents -> `/docs/api-reference/agents`
- Delete workspace agent -> `/docs/api-reference/agents/delete-api-v1-agents-id`
- List workspace agents -> `/docs/api-reference/agents/get-api-v1-agents`
- Get workspace agent -> `/docs/api-reference/agents/get-api-v1-agents-id`
- List agent chats -> `/docs/api-reference/agents/get-api-v1-agents-id-chats`
- Get agent chat -> `/docs/api-reference/agents/get-api-v1-agents-id-chats-chatid`
- Update workspace agent -> `/docs/api-reference/agents/patch-api-v1-agents-id`
- Create workspace agent -> `/docs/api-reference/agents/post-api-v1-agents`
- Send agent message -> `/docs/api-reference/agents/post-api-v1-agents-id-chats-chatid-messages`
- Apps -> `/docs/api-reference/apps`
- Delete app -> `/docs/api-reference/apps/delete-api-v1-apps-id`
- List workspace apps -> `/docs/api-reference/apps/get-api-v1-apps`
- Get app by id -> `/docs/api-reference/apps/get-api-v1-apps-id`
- Update app -> `/docs/api-reference/apps/patch-api-v1-apps-id`
- Create app -> `/docs/api-reference/apps/post-api-v1-apps`
- Automations -> `/docs/api-reference/automations`
- Delete workspace automation -> `/docs/api-reference/automations/delete-api-v1-automations-id`
- List workspace automations -> `/docs/api-reference/automations/get-api-v1-automations`
- Get workspace automation -> `/docs/api-reference/automations/get-api-v1-automations-id`
- List automation runs -> `/docs/api-reference/automations/get-api-v1-automations-id-runs`
- Get automation run -> `/docs/api-reference/automations/get-api-v1-automations-id-runs-runid`
- Update workspace automation -> `/docs/api-reference/automations/patch-api-v1-automations-id`
- Create workspace automation -> `/docs/api-reference/automations/post-api-v1-automations`
- Run automation -> `/docs/api-reference/automations/post-api-v1-automations-id-run`
- Trigger automation webhook -> `/docs/api-reference/automations/post-api-v1-automations-webhooks-publicid-secret`
- Channels -> `/docs/api-reference/channels`
- Delete channel -> `/docs/api-reference/channels/delete-api-v1-channels-channelid`
- List channels -> `/docs/api-reference/channels/get-api-v1-channels`
- Get channel -> `/docs/api-reference/channels/get-api-v1-channels-channelid`
- Update channel -> `/docs/api-reference/channels/patch-api-v1-channels-channelid`
- Create channel -> `/docs/api-reference/channels/post-api-v1-channels`
- Data -> `/docs/api-reference/data`
- Data Definitions -> `/docs/api-reference/data-definitions`
- Delete data definition -> `/docs/api-reference/data-definitions/delete-api-v1-data-definitions-id`
- List data definitions -> `/docs/api-reference/data-definitions/get-api-v1-data-definitions`
- Get data definition -> `/docs/api-reference/data-definitions/get-api-v1-data-definitions-id`
- Update data definition -> `/docs/api-reference/data-definitions/patch-api-v1-data-definitions-id`
- Create data definition -> `/docs/api-reference/data-definitions/post-api-v1-data-definitions`
- Data SQL Query -> `/docs/api-reference/data-sql-query`
- Run SQL query against workspace data -> `/docs/api-reference/data-sql-query/post-api-v1-data-sql-query`
- Get data by id -> `/docs/api-reference/data/get-api-v1-data-definitions-definitionid-data-id`
- Select all data row ids -> `/docs/api-reference/data/get-api-v1-data-definitions-definitionid-data-select-all`
- List data -> `/docs/api-reference/data/get-api-v1-data-definitions-definitionid-query`
- Patch many data rows -> `/docs/api-reference/data/patch-api-v1-data-definitions-definitionid-data-patch-many`
- Delete many data rows -> `/docs/api-reference/data/post-api-v1-data-definitions-definitionid-data-delete-many`
- Upsert many data rows -> `/docs/api-reference/data/post-api-v1-data-definitions-definitionid-data-upsert-many`
- DuckDB Query -> `/docs/api-reference/duckdb-query`
- Run a DuckDB query against registered sources -> `/docs/api-reference/duckdb-query/post-api-v1-duckdb-query`
- Explorer -> `/docs/api-reference/explorer`
- Delete explorer folder -> `/docs/api-reference/explorer/delete-api-v1-workspace-nodes-nodeid`
- List explorer nodes -> `/docs/api-reference/explorer/get-api-v1-workspace-nodes`
- List explorer folders -> `/docs/api-reference/explorer/get-api-v1-workspace-nodes-folders`
- Rename explorer folder -> `/docs/api-reference/explorer/patch-api-v1-workspace-nodes-nodeid-rename`
- Create folder -> `/docs/api-reference/explorer/post-api-v1-workspace-nodes-folders`
- Move explorer node -> `/docs/api-reference/explorer/post-api-v1-workspace-nodes-nodeid-move`
- Files -> `/docs/api-reference/files`
- List workspace files -> `/docs/api-reference/files/get-api-v1-files`
- Read file content -> `/docs/api-reference/files/get-api-v1-files-fileid-content`
- Create file -> `/docs/api-reference/files/post-api-v1-files`
- Complete file upload -> `/docs/api-reference/files/post-api-v1-files-fileid-complete`
- Presign multipart parts -> `/docs/api-reference/files/post-api-v1-files-fileid-parts`
- Update file content -> `/docs/api-reference/files/put-api-v1-files-fileid-content`
- Messages -> `/docs/api-reference/messages`
- List channel messages -> `/docs/api-reference/messages/get-api-v1-channels-channelid-messages`
- List thread messages -> `/docs/api-reference/messages/get-api-v1-channels-channelid-threads-threadid-messages`
- Create channel message -> `/docs/api-reference/messages/post-api-v1-channels-channelid-messages`
- Create thread message -> `/docs/api-reference/messages/post-api-v1-channels-channelid-threads-threadid-messages`
- Notifications -> `/docs/api-reference/notifications`
- List notification devices -> `/docs/api-reference/notifications/get-api-v1-notifications-devices`
- Check Expo notification receipts -> `/docs/api-reference/notifications/post-api-v1-notifications-receipts`
- Send workspace notifications -> `/docs/api-reference/notifications/post-api-v1-notifications-send`
- Runs -> `/docs/api-reference/runs`
- List workspace runs -> `/docs/api-reference/runs/get-api-v1-runs`
- Get workspace run -> `/docs/api-reference/runs/get-api-v1-runs-runid`
- Threads -> `/docs/api-reference/threads`
- List channel threads -> `/docs/api-reference/threads/get-api-v1-channels-channelid-threads`
- Get thread -> `/docs/api-reference/threads/get-api-v1-channels-channelid-threads-threadid`
- Create thread -> `/docs/api-reference/threads/post-api-v1-channels-channelid-threads`
- Workflows -> `/docs/api-reference/workflows`
- Delete workflow definition -> `/docs/api-reference/workflows/delete-api-v1-workflows-id`
- List workflow definitions -> `/docs/api-reference/workflows/get-api-v1-workflows`
- Get workflow definition -> `/docs/api-reference/workflows/get-api-v1-workflows-id`
- Update workflow definition -> `/docs/api-reference/workflows/patch-api-v1-workflows-id`
- Create workflow definition -> `/docs/api-reference/workflows/post-api-v1-workflows`
- Workspaces -> `/docs/api-reference/workspaces`
- Delete workspace API key -> `/docs/api-reference/workspaces/delete-api-v1-workspaces-workspacehandle-api-keys-keyid`
- Delete workspace credential -> `/docs/api-reference/workspaces/delete-api-v1-workspaces-workspacehandle-credentials-credentialid`
- Delete workspace invitation -> `/docs/api-reference/workspaces/delete-api-v1-workspaces-workspacehandle-invitations-invitationid`
- Delete workspace user -> `/docs/api-reference/workspaces/delete-api-v1-workspaces-workspacehandle-users-userid`
- List my workspaces -> `/docs/api-reference/workspaces/get-api-v1-workspaces`
- List workspace API keys -> `/docs/api-reference/workspaces/get-api-v1-workspaces-workspacehandle-api-keys`
- List workspace credentials -> `/docs/api-reference/workspaces/get-api-v1-workspaces-workspacehandle-credentials`
- List workspace credential tools -> `/docs/api-reference/workspaces/get-api-v1-workspaces-workspacehandle-credentials-credentialid-tools`
- List workspace invitations -> `/docs/api-reference/workspaces/get-api-v1-workspaces-workspacehandle-invitations`
- List workspace users -> `/docs/api-reference/workspaces/get-api-v1-workspaces-workspacehandle-users`
- Create workspace -> `/docs/api-reference/workspaces/post-api-v1-workspaces`
- Create workspace API key -> `/docs/api-reference/workspaces/post-api-v1-workspaces-workspacehandle-api-keys`
- Create workspace credential -> `/docs/api-reference/workspaces/post-api-v1-workspaces-workspacehandle-credentials`
- Invite user to workspace -> `/docs/api-reference/workspaces/post-api-v1-workspaces-workspacehandle-invitations`
- Create workspace user -> `/docs/api-reference/workspaces/post-api-v1-workspaces-workspacehandle-users`
- Apps -> `/docs/apps` (source: `content/docs/apps.mdx`)
- Authentication -> `/docs/authentication` (source: `content/docs/authentication.mdx`)
- Building Blocks -> `/docs/building-blocks` (source: `content/docs/building-blocks.mdx`)
- Data Model -> `/docs/data-model` (source: `content/docs/data-model.mdx`)
- Embedded Host Actions -> `/docs/embedded-host-actions` (source: `content/docs/embedded-host-actions.mdx`)
- Introduction -> `/docs/introduction` (source: `content/docs/introduction.mdx`)
- Recipes -> `/docs/receipes` (source: `content/docs/receipes/index.mdx`)
- Daily Lead Qualification Agent -> `/docs/receipes/daily-lead-qualification-agent` (source: `content/docs/receipes/daily-lead-qualification-agent.mdx`)
- Day Planner Agent -> `/docs/receipes/day-planner-agent` (source: `content/docs/receipes/day-planner-agent.mdx`)
- Expense Tracker -> `/docs/receipes/expense-tracker` (source: `content/docs/receipes/expense-tracker.mdx`)
- Legal Case Tracker -> `/docs/receipes/legal-case-tracker` (source: `content/docs/receipes/legal-case-tracker.mdx`)
- Spare Parts Request Agent -> `/docs/receipes/spare-parts-request-agent` (source: `content/docs/receipes/spare-parts-request-agent.mdx`)
- Weekly Report Email Agent -> `/docs/receipes/weekly-report-email-agent` (source: `content/docs/receipes/weekly-report-email-agent.mdx`)
- UI Components -> `/docs/ui-components` (source: `content/docs/ui-components.mdx`)