Skip to main content
The Public REST API gives trusted server-side integrations CRUD access to Trellis tasks and properties. It uses the same workspace API keys created in Settings > Developer.
This REST surface is intentionally narrow. Use documented MCP tools for broader Trellis workflows, or contact Trellis support before building against objects that are not listed here.

Base URL

https://app.trellistech.com/api/v1
Interactive reference:
https://app.trellistech.com/public-docs
OpenAPI document:
https://app.trellistech.com/api/v1/openapi.public.json

Authentication

Send the workspace API key as a Bearer token:
curl -H "Authorization: Bearer trls_acmevaca_abc123..." \
  "https://app.trellistech.com/api/v1/workspaces/acme-vacations/properties?limit=25"
The {workspaceId} path segment must be the same workspace that issued the key. Workspace IDs are text values, such as acme-vacations. 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.

Contract versions

ContractVersionNotes
Public REST APIv1Versioned in the URL path
OpenAPI document3.1.0Available at /api/v1/openapi.public.json
Tasks objecttasks.v1.1.0Adds create, update, and delete operations
Properties objectproperties.v1.2.0Removes legacy internal Italian property columns from the public contract
Breaking changes require a new object contract version or a new REST API version.

Endpoints

MethodPathDescription
GET/workspaces/{workspaceId}/propertiesList non-deleted properties in the workspace
POST/workspaces/{workspaceId}/propertiesCreate a property
GET/workspaces/{workspaceId}/properties/{propertyId}Get one property by ID
PATCH / PUT/workspaces/{workspaceId}/properties/{propertyId}Update property fields
DELETE/workspaces/{workspaceId}/properties/{propertyId}Soft-delete a property
GET/workspaces/{workspaceId}/tasksList non-deleted tasks in the workspace
POST/workspaces/{workspaceId}/tasksCreate a task
GET/workspaces/{workspaceId}/tasks/{taskId}Get one task by ID
PATCH / PUT/workspaces/{workspaceId}/tasks/{taskId}Update task fields
DELETE/workspaces/{workspaceId}/tasks/{taskId}Soft-delete a task

Pagination

List endpoints accept limit and offset.
ParameterDefaultRange
limit501 to 100
offset00 or greater
Responses include:
{
  "items": [],
  "pagination": {
    "total": 125,
    "limit": 50,
    "offset": 0,
    "hasMore": true
  }
}

Properties

List properties:
curl -H "Authorization: Bearer $TRELLIS_API_KEY" \
  "https://app.trellistech.com/api/v1/workspaces/acme-vacations/properties?status=ACTIVE&q=duomo"
Supported filters:
QueryDescription
statusProperty lifecycle status, such as ACTIVE
qSearch by name, internal code, or city
limitMaximum number of properties
offsetNumber of properties to skip
Get a property:
curl -H "Authorization: Bearer $TRELLIS_API_KEY" \
  "https://app.trellistech.com/api/v1/workspaces/acme-vacations/properties/11111111-1111-4111-8111-111111111111"
Create a property:
curl -X POST \
  -H "Authorization: Bearer $TRELLIS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"Casa Duomo","status":"ACTIVE","city":"Milano"}' \
  "https://app.trellistech.com/api/v1/workspaces/acme-vacations/properties"
Update a property:
curl -X PATCH \
  -H "Authorization: Bearer $TRELLIS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"wifiName":"Casa Duomo Guest","wifiPassword":"stored-server-side"}' \
  "https://app.trellistech.com/api/v1/workspaces/acme-vacations/properties/11111111-1111-4111-8111-111111111111"
Delete a property:
curl -X DELETE \
  -H "Authorization: Bearer $TRELLIS_API_KEY" \
  "https://app.trellistech.com/api/v1/workspaces/acme-vacations/properties/11111111-1111-4111-8111-111111111111"

Tasks

List tasks:
curl -H "Authorization: Bearer $TRELLIS_API_KEY" \
  "https://app.trellistech.com/api/v1/workspaces/acme-vacations/tasks?status=OPEN&priority=HIGH"
Supported filters:
QueryDescription
statusTask status, such as OPEN or COMPLETED
priorityTask priority, such as NORMAL, HIGH, or URGENT
propertyIdUUID of the related property
departmentIdUUID of the related department
scheduledFromInclude tasks scheduled on or after this YYYY-MM-DD date
scheduledToInclude tasks scheduled on or before this YYYY-MM-DD date
qSearch by title, description, or short ID
limitMaximum number of tasks
offsetNumber of tasks to skip
Get a task:
curl -H "Authorization: Bearer $TRELLIS_API_KEY" \
  "https://app.trellistech.com/api/v1/workspaces/acme-vacations/tasks/22222222-2222-4222-8222-222222222222"
Create a task:
curl -X POST \
  -H "Authorization: Bearer $TRELLIS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"title":"Replace bathroom light bulb","departmentId":"33333333-3333-4333-8333-333333333333","priority":"HIGH"}' \
  "https://app.trellistech.com/api/v1/workspaces/acme-vacations/tasks"
Task creation uses the same Trellis mutation path as the app: assignees, tags, visit links, activity, notifications, automations, enrichment, and connected operational sync are handled by the normal task side-effect pipeline. Update a task:
curl -X PATCH \
  -H "Authorization: Bearer $TRELLIS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"status":"COMPLETED","summary":"Bulb replaced and tested."}' \
  "https://app.trellistech.com/api/v1/workspaces/acme-vacations/tasks/22222222-2222-4222-8222-222222222222"
Delete a task:
curl -X DELETE \
  -H "Authorization: Bearer $TRELLIS_API_KEY" \
  "https://app.trellistech.com/api/v1/workspaces/acme-vacations/tasks/22222222-2222-4222-8222-222222222222"

Errors

StatusMeaning
400Request validation failed
401API key is missing, invalid, expired, or not valid for the requested workspace
403Authenticated user does not have access to the requested workspace
404Workspace, task, or property was not found
409Task completion is blocked by another task or workflow rule
422Request is valid JSON but cannot be applied to the current object
500Trellis could not complete the request