Skip to content

feat: Port Taskade public-API actions, searches & agent into the Zapier integration - #13

Merged
johnxie merged 2 commits into
masterfrom
feat/port-public-api-actions
Jun 9, 2026
Merged

feat: Port Taskade public-API actions, searches & agent into the Zapier integration#13
johnxie merged 2 commits into
masterfrom
feat/port-public-api-actions

Conversation

@johnxie

Copy link
Copy Markdown
Member

Summary

Brings the Taskade Zapier integration up to date with the public API. The app previously shipped only 1 user-facing trigger + 1 action (task_due, create_task); the public REST API has long supported full task/project CRUD plus AI-agent prompting. This PR ports those, factored through a small shared client + dropdown-field builders, with a schema-validation regression test.

create_task and task_due are untouched — zero regression. This is additive only.

What's added

ACTIONS (creates) ENDPOINT (verified against the public API)
──────────────────────────────────────── ──────────────────────────────────────────────
complete_task Complete / reopen a task POST /api/v1/projects/{id}/tasks/{taskId}/complete|uncomplete
update_task Update task content PUT /api/v1/projects/{id}/tasks/{taskId}
delete_task Delete a task DELETE /api/v1/projects/{id}/tasks/{taskId}
move_task Reorder/reparent a task PUT /api/v1/projects/{id}/tasks/{taskId}/move
create_project New project from Markdown POST /api/v1/projects
create_project_from_template POST /api/v1/projects/from-template
run_agent Prompt a Taskade AI agent POST /api/v2/promptAgent (v2 Action API)
custom_api_call Authenticated escape hatch ANY /api/v1/* (user-supplied)
SEARCHES ENDPOINT
──────────────────────────────────────── ──────────────────────────────────────────────
find_task Find a task by text GET /api/v1/projects/{id}/tasks (client-side match)
find_project Find a project by name GET /api/v1/me/projects | /folders/{id}/projects
DROPDOWN HELPERS (hidden triggers) ENDPOINT
──────────────────────────────────────── ──────────────────────────────────────────────
get_all_tasks powers task_id GET /api/v1/projects/{id}/tasks
get_all_project_templates powers template GET /api/v1/folders/{id}/project-templates

Structure

FileRole
src/client.tsOne request() helper (mirrors createTask.ts auth/headers exactly) + parseOk() error handling
src/fields.tsShared dropdown-field builders for the Workspace/Folder -> Project -> Task chain
src/creates/*, src/searches/*Each action/search is ~40 lines using the two helpers
src/test/app.test.tsSchema-validation regression test (below)

Hygiene

Dropped four verified-unused dependencies (0 imports across src/): @apollo/client, graphql, lodash, uuid — leftover from the pre-OpenAPI GraphQL era.

Zero-regression verification

GateResult
yarn build (tsc)green
yarn test4/4 pass
validateAppDefinition (Zapier official schema)0 errors across the whole app
create_task / task_dueunchanged

The new test converts functions to Zapier's $func$<arity>$f$ markers and runs zapier-platform-schema.validateAppDefinition — the same check zapier validate runs — so the app is provably schema-valid (also repairs the previously-broken empty test script).

Pre-PR code review — issues found and fixed

#SeverityIssueFix
1Highcomplete_task: === false never matched the string boolean Zapier sends -> Uncomplete was deadDetect false/'false'
2Highcustom_api_call: z.request auto-throws on 4xx, so the escape hatch couldn't surface error status/bodyskipThrowForStatus: true
3Medfind_task/find_project: only first page readWiden page size (limit=100); matching client-side
4Lowtest lint (curly, no-var-requires)Braces + scoped eslint-disable

Confirmed not issues: parseOk matches the existing createTask error pattern (no regression); run_agent.summary is the verified v2 promptAgent response field; all dynamic-dropdown references resolve.

Out of scope / follow-ups

  • Triggers beyond task_due (task completed/created, etc.) need a public webhook-subscription endpoint in taskade/taskcade — tracked separately; not buildable from the public API today.
  • Manifest + codegen refactor (render this same surface to n8n / Activepieces) builds on this known-good baseline.

Deployment

zapier push is a separate manual step (not run in this PR). This PR only changes source; deploying to the live app (id 163485) is deliberate and gated on review.

Generated with Claude Code.

johnxie added 2 commits June 9, 2026 10:25
…ead deps
Adds the actions the public Taskade API already supports but the integration
lacked: Complete/Update/Delete/Move Task, Create Project (+ from template),
Run AI Agent (v2 promptAgent), Custom API Call, plus Find Task/Find Project
searches. Factors a shared request client + dropdown-field builders.
- Drops unused deps (@apollo/client, graphql, lodash, uuid)
- Adds get_all_tasks / get_all_project_templates dropdown helpers
- Adds a schema-validation test (validateAppDefinition) as a regression oracle
- create_task and task_due are untouched (zero regression)
…passthrough, search paging
Addresses pre-PR code review:
- completeTask: detect 'false' string so Uncomplete actually fires
- customApiCall: skipThrowForStatus so non-2xx status/body reach the user
- findTask/findProject/getAllTasks: widen page size (limit=100)
- test: lint (curly braces, eslint-disable for require)
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@johnxie