Skip to content

Teamwork#

Teamwork is registered for API sync with sync-coupled user import. It pulls tasks from one configured Teamwork project or tasklist into a reviewable import session, proposes TeamBoost user mappings from Teamwork people and task actors, and projects each task into the internal integrations task-create draft.

Capability Method Status
SYNC Pull tasks from the Teamwork API Built
USER_IMPORT Bring Teamwork people into task-import mapping Built as part of API sync
CSV_IMPORT Upload a Teamwork CSV/report export Not built
WEBHOOK Verify Teamwork webhook events Not built

The endpoints below live under /api/v1/providers/teamwork/.... They are generic: the same routes serve any registered provider by substituting the {provider} path segment. All routes require an organization-scoped user token (see Authentication).

Discovery#

GET /api/v1/providers/teamwork
{
  "status": "success",
  "data": { "provider": "teamwork", "capabilities": ["SYNC", "USER_IMPORT"] }
}

Credential Verification#

Teamwork API keys can be stored and verified as an encrypted JSON credential:

PUT /api/v1/providers/teamwork/credentials?organization_id=<id>
POST /api/v1/providers/teamwork/credentials/verify?organization_id=<id>

The stored secret is a JSON object:

{
  "site_url": "https://example.teamwork.com",
  "api_key": "<teamwork-api-key>",
  "sync_scope": {
    "kind": "project",
    "id": "12345"
  }
}

sync_scope.kind may be project or tasklist; id is the numeric Teamwork scope id as a string or number. Verification uses Teamwork Basic auth with api_key:x and a cheap Teamwork V3 API probe:

  • project scope: GET /projects/api/v3/projects.json?projectIds=<id>&pageSize=1
  • tasklist scope: GET /projects/api/v3/tasklists/<id>.json?pageSize=1

The service accepts a copied Teamwork browser URL and normalizes it to the tenant base URL, for example https://example.teamwork.com/app/projects/123/settings becomes https://example.teamwork.com. Stored secrets are encrypted at rest and never returned by the credential endpoints.

Importing From The Teamwork API#

POST /api/v1/providers/teamwork/imports/sync?organization_id=<id>

Uses the stored, encrypted Teamwork credential to fetch the configured project or tasklist scope. The adapter follows Teamwork V3 pagination, pulls people for the proposed user mapping, and requests task sideloads for users, tags, tasklists, and projects.

Teamwork source records preserve raw task fields plus mapping context such as projectName, tasklistName, tag names, assignee ids, workflow stages, parent task id, dependency/predecessor/subtask ids, and custom field values.

User Mapping#

Teamwork USER_IMPORT rides the sync flow. The adapter proposes mappings from:

  • people returned by GET /projects/api/v3/people.json;
  • users sideloaded from task responses;
  • task creator and assignee ids referenced by synced tasks.

The primary matching key is the Teamwork user id (sourceAccountId). E-mail is secondary when present. A present but unmapped primary assignee creates a blocking projectionError. A missing or unmapped creator leaves creatorId unset with a non-blocking mapping note.

If a Teamwork task has multiple assignees, the first deterministic assignee is used as the proposed TeamBoost owner and all assignee ids are preserved in descriptionJson with a mapping note.

Projection Field Coverage#

Teamwork source TeamBoost draft field Notes
name title Error if shorter than 2 characters
Task/tag labels such as bug, feature, docs, review, security type Defaults to OTHER with a mapping note
description description descriptionContentType is preserved in descriptionJson
status status Known statuses map to TeamBoost task status; unknown labels are left unset with a note
priority priority high/medium/low map directly; unknown labels default to UNKNOWN with a note
createdByUserId / createdBy creatorId Resolved through the user mapping when possible
First deterministic assignee ownerId Present-but-unmapped owner blocks confirm
Tags labels Tag names pass through; TeamBoost creates/maps labels server-side
Configured project projectTitle
Tasklist taskGroupTitle
startDate / dueDate plannedStartDate / plannedEndDate Date-only values normalize to UTC start/end-of-day
Parent, dependencies, predecessors, subtasks, workflow stages, custom fields descriptionJson Preserved for review; not wired as TeamBoost relationships in this first unit

Not Built Yet#

  • Teamwork CSV/report import.
  • Teamwork OAuth app install flow.
  • Teamwork webhook registration and event verification.