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
| Contract | Version | Notes |
|---|
| Public REST API | v1 | Versioned in the URL path |
| OpenAPI document | 3.1.0 | Available at /api/v1/openapi.public.json |
| Tasks object | tasks.v1.1.0 | Adds create, update, and delete operations |
| Properties object | properties.v1.2.0 | Removes legacy internal Italian property columns from the public contract |
Breaking changes require a new object contract version or a new REST API version.
Endpoints
| Method | Path | Description |
|---|
GET | /workspaces/{workspaceId}/properties | List non-deleted properties in the workspace |
POST | /workspaces/{workspaceId}/properties | Create 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}/tasks | List non-deleted tasks in the workspace |
POST | /workspaces/{workspaceId}/tasks | Create 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 |
List endpoints accept limit and offset.
| Parameter | Default | Range |
|---|
limit | 50 | 1 to 100 |
offset | 0 | 0 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:
| Query | Description |
|---|
status | Property lifecycle status, such as ACTIVE |
q | Search by name, internal code, or city |
limit | Maximum number of properties |
offset | Number 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:
| Query | Description |
|---|
status | Task status, such as OPEN or COMPLETED |
priority | Task priority, such as NORMAL, HIGH, or URGENT |
propertyId | UUID of the related property |
departmentId | UUID of the related department |
scheduledFrom | Include tasks scheduled on or after this YYYY-MM-DD date |
scheduledTo | Include tasks scheduled on or before this YYYY-MM-DD date |
q | Search by title, description, or short ID |
limit | Maximum number of tasks |
offset | Number 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
| Status | Meaning |
|---|
400 | Request validation failed |
401 | API key is missing, invalid, expired, or not valid for the requested workspace |
403 | Authenticated user does not have access to the requested workspace |
404 | Workspace, task, or property was not found |
409 | Task completion is blocked by another task or workflow rule |
422 | Request is valid JSON but cannot be applied to the current object |
500 | Trellis could not complete the request |