TaskJunkyDocs

Integrations & Webhooks

Connect external services to TaskJunky via the REST API, webhooks, GitHub sync, and bulk import.

Any external service can create tasks, log activity, or query data via the REST API. Tasks created via the API get source: "api" and their descriptions are shown as read-only in the dashboard (designed for external content like bug reports or feedback).

PostHog Feedback Webhook

This section is specifically for the PostHog feedback loop. TaskJunky includes a dedicated PostHog receiver for feedback_submitted events, and each accepted event creates a task in the User Feedback list.

In Settings > Developer > Webhook Routing, app identifiers are optional for this flow. If you use routing rules, you can match by TaskJunky project, app identifier, or both. A native bundle ID like com.taskjunky.app or a web identifier like web.taskjunky.app both work.

  • Endpoint: https://web.taskjunky.app/api/posthog/webhook
  • Header: Authorization: Bearer <POSTHOG_WEBHOOK_SECRET>
  • Only processes event = "feedback_submitted"
  • Required properties: sentiment, trigger, app_version
  • Optional routing fields: project_id, project_name, app_id, bundle_id
  • Supported sentiments: loved, meh, frustrated
{
  "event": "feedback_submitted",
  "distinct_id": "user_123",
  "timestamp": "2026-03-29T18:45:00.000Z",
  "properties": {
    "sentiment": "frustrated",
    "note": "The task detail panel feels slow when I open subtasks.",
    "trigger": "manual",
    "surface": "web_app",
    "app_version": "1.0.6",
    "device_model": "MacBookPro18,3",
    "is_pro_user": true,
    "user_email": "user@example.com"
  }
}

Basic Webhook: Create a Task

curl -X POST "https://taskjunky.app/api/tasks" \
  -H "X-API-Key: tj_your_key" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Bug report: Login page broken on Safari",
    "description": "User reported that the login button does not respond on Safari 17.2. Screenshot attached in Zendesk ticket #4521.",
    "source": "api",
    "priority": "high"
  }'

GitHub Actions

Create a task when CI fails or a PR is merged:

# .github/workflows/notify-taskjunky.yml
name: Notify TaskJunky
on:
  pull_request:
    types: [closed]

jobs:
  notify:
    if: github.event.pull_request.merged == true
    runs-on: ubuntu-latest
    steps:
      - run: |
          curl -X POST "https://taskjunky.app/api/tasks" \
            -H "X-API-Key: ${{ secrets.TASKJUNKY_API_KEY }}" \
            -H "Content-Type: application/json" \
            -d '{
              "title": "PR merged: ${{ github.event.pull_request.title }}",
              "description": "${{ github.event.pull_request.body }}",
              "source": "api",
              "priority": "low"
            }'

App Feedback Button

Send in-app feedback directly to your TaskJunky inbox:

async function sendFeedback(message: string) {
  await fetch("https://taskjunky.app/api/tasks", {
    method: "POST",
    headers: {
      "X-API-Key": process.env.TASKJUNKY_API_KEY,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      title: "User feedback",
      description: message,
      source: "api",
      priority: "medium",
    }),
  });
}

GitHub Issue Sync

TaskJunky can import GitHub issues and PRs as tasks. Connect a repo to a project via the project settings in the sidebar, then click Sync issues & PRs.

  • Issues become tasks with source: "github"
  • Issue body becomes the task description (read-only)
  • PRs are tracked with githubPrNumber
  • Closed issues/PRs are marked as done
# Trigger sync via API
curl -X POST "https://taskjunky.app/api/github/{projectId}/sync" \
  -H "X-API-Key: tj_your_key"

Bulk Import

Use the bulk endpoint to import many tasks at once (up to 100 per request):

curl -X POST "https://taskjunky.app/api/tasks/bulk" \
  -H "X-API-Key: tj_your_key" \
  -H "Content-Type: application/json" \
  -d '{
    "listId": "your-list-id",
    "tasks": [
      { "title": "Task 1", "priority": "high" },
      { "title": "Task 2", "priority": "medium" },
      { "title": "Task 3", "description": "With details" }
    ]
  }'

On this page