Use the Public OpenAPI document for the available operational endpoints and the dedicated Workflow
OpenAPI document for definitions, runs, tests, variables, and approvals. Build against
documented operations so your integration can validate fields, permissions, and responses.
Base URL
Authentication
Send the workspace API key as a Bearer token:id as {workspaceId}. The response contains only the key’s owner workspace.
Public REST calls do not require a Trellis web login session or browser cookie. Store API keys only in trusted server-side environments, and rotate a key from Settings > Developer if it is exposed.
Keys created for a named server integration are single-workspace technical identities. The administrator who creates the key is retained for audit only and is not exposed as a user or assignee. Requests are limited to the key’s owner workspace and scopes, and the key remains active until it expires or an administrator of that workspace revokes it.
Named integration presets limit the available scopes. For example, the RapidEye preset permits selected task and operational actions plus property reads; it does not permit property creation, updates, or deletion. Read each operation’s required scope in the interactive reference before enabling it.
MCP client keys remain member-based and inherit the creator’s active workspace membership and role.
You can also authenticate with an access token obtained from POST /api/v1/auth/token. See Authentication for details.
Authentication and scope requirements are listed per operation in the OpenAPI documents. A valid
credential does not grant access to every operation or to another workspace.
Contract versions
The generated OpenAPI document is the source for the current schemas and all resource versions.
Breaking changes require a new object contract version or a new REST API version.
Endpoints
Workspace discovery
Properties
Custom property fields
See Read and write custom fields for discovery and value updates.Tasks
Task checklist actions, attachments, and tags
Workspace lookups
Workflow automations
The Workflow API manages saved definitions and their immutable versions separately from executions. Use the dedicated Workflow OpenAPI document for the complete operation list and request schemas.
Run listings, counts, health summaries, action choices, and previous/next navigation exclude executions of automatic standard tasks. Their persisted execution details remain available by run ID for diagnostics.
Workflow API keys use three least-privilege scopes:
workflows:readreads definitions, versions, runs, tests, and related resources.workflows:writecreates or changes saved resources.workflows:executestarts execution, activates a definition, resolves approvals, and retries runs.
Idempotency-Key can be retried safely with the same request body. Mutations that declare If-Match require the current ETag, which prevents one client from overwriting a newer change. Run requests return 202 Accepted; follow the response’s status URL until the run reaches a final state.
Pagination
Task and property lists acceptlimit and offset. Check other operations individually: some resources use their own pagination contract.
Paginated responses include a
pagination object. The records may be named tasks, data, or another resource-specific field; use the operation schema rather than assuming a common items field. For example:
Properties
List properties
Property statuses:
PROSPECT, ONBOARDING, ACTIVE, AT_RISK, INACTIVE.
Get a property
Create a property
Update a property
First retrieve the property withGET and save the response’s ETag header, including its quotes, as TRELLIS_PROPERTY_ETAG. Send that exact value in If-Match when updating. A stale version returns 412; a missing version returns 428. Fetch the latest record and review the new values before trying again.
PATCH and PUT both apply the supplied fields without clearing omitted fields. Read the returned record and new ETag before another update.
Delete a property
Property object
Property reads return a canonical record underdata, with response metadata under meta. Location fields are nested under location; write requests use the documented update fields, so do not send an entire read response back as an update.
Additional room count fields (
kitchens, livingRooms, hallways, terraces, balconies, gardens), stay limits (minNights, maxNights, minGuests), and deal tracking (dealValue) are also available. See the interactive reference or OpenAPI document for the full schema.
Read and write custom fields
UseGET /workspaces/{workspaceId}/property-fields to discover field definitions and GET /workspaces/{workspaceId}/properties/{propertyId}/fields to read their values. Write a value through the dedicated /properties/{propertyId}/fields/{fieldDefinitionId} operation using its stable field definition ID. Document values have their own operations. Do not send a customFields object to the core property update endpoint.
Tasks
List tasks
Task statuses:
OPEN, CREATED, DRAFT, DRAFTED, SCHEDULED, IN_PROGRESS, FINISHED, CLOSED, PENDING_APPROVAL, REQUEST_APPROVED, REQUEST_REJECTED, COMPLETED.
Use COMPLETED to complete a task. FINISHED is a legacy input alias and is normalized to COMPLETED when saved. Task responses present legacy finished records as COMPLETED. Visits use COMPLETED and do not have a FINISHED status.
Task priorities: WATCH, LOWEST, LOW, NORMAL, HIGH, URGENT.
Task sources: MANUAL, AUTOMATION, SCHEDULE_RULE, INTEGRATION, AI, REVIEW, MESSAGE, CALL, MEETING_BOT.
Embedding related resources
Use theinclude query parameter to embed cost items and assignees in the task response:
costItems: Array of cost line items withamount,currency,description,billToType,categoryName, andnotes.assignees: Array of task assignees withrole(PRIMARYorSECONDARY),type(USERorVENDOR),userId,vendorOrgId, andname.
Get a task
Create a task
departmentName, templateId or templateName, and assignmentIntent when using those paths.
Common create request fields:
Update a task
Fetch the task first and copy itstask.updatedAt value into the required expectedUpdatedAt field. Replace the timestamp below with the exact value you received. This prevents your integration from overwriting a newer change.
status, summary, completedAt, startedAt, sortOrder, projectId, billableToOwner, cost, costCurrency, isNoCharge, customFields, completionFields, replacePrimaryUser.
Delete a task
Task object
Additional fields for integrations, scheduling, vendor workflows, and AI provenance are also returned. See the interactive reference or OpenAPI document for the full schema.
External checklist actions
Use a linked checklist action when another service must finish work before the Trellis task can be completed. The sameexternalSource and externalId can be retried safely for one task.
actionUrl must use HTTPS. Trellis displays it as the checklist action link without modifying the originating template. When externalSource is exactly rapideye, Trellis also appends one labeled inspection link to the existing task description and sends that description update to the connected operations provider. Retrying the same item does not duplicate the description link, and a pending or failed provider delivery can be retried safely. Other external sources remain Trellis-only. A required item with blocksCompletion: true prevents normal task completion until the item is completed.
After the external work finishes, mark the item complete. Repeating this request preserves the first completion timestamp:
Durable task photos
The attachment operation downloads an existing public HTTPS image immediately and stores a durable copy in Trellis. Signed source URLs are supported: they only need to remain valid for the duration of the POST request.image/* content type, and be no larger than 25 MB. Trellis records the downloaded byte count rather than trusting the optional sizeBytes hint. After the copy succeeds, Trellis keeps the durable internal URL and does not retain or return the signed source URL. For backward compatibility, both internalUrl and the legacy externalUrl response field point to the durable Trellis copy. The durable image is then queued through the same task-media sync used by the Trellis app; a linked operations provider such as Breezeway receives its own copy asynchronously.
Repeating the same task, source, and external ID with the same API key returns the existing durable attachment without downloading it again. If that idempotency record predates durable storage, sending a fresh source URL backfills its Trellis copy.
Task tags
Discover the active tags that can be assigned to tasks:id to assign the tag idempotently:
Departments and assignable users
UseGET /workspaces/{workspaceId}/departments to select a valid departmentId for task creation. Use GET /workspaces/{workspaceId}/users to list active assignees. The user response includes display name, role, membership ID, user ID, and department IDs; email addresses and phone numbers are not returned.
Daily work orders
The daily work orders endpoint returns tasks with statusSCHEDULED in field-ops departments for a single calendar date, formatted as costed work orders with assignee details. Use it for daily operations reports and workforce cost summaries. Tasks in other statuses or non-field-ops departments are excluded.
Response:
totalCost is null, totalCostCurrency is "MIXED", and costTotalsByCurrency contains per-currency totals.