Support
File a ticket from code, curl, or an agent — POST /api/support mirrors every ticket into our GitHub support repo. Your agent can call the create_support_ticket MCP tool and file the issue itself the moment something breaks.
Five kinds
bugfeaturebillingquestionotherPOST /api/support/upload
Upload a screenshot before filing. Accepts multipart/form-data with a single file field. Returns a URL you pass back as attachmentUrls[] when you call POST /api/support. Limits: 5MB per file, image/* only, 10 per hour per org.
curl -X POST https://trydock.ai/api/support/upload \
-H "Authorization: Bearer dk_live_..." \
-F "file=@screenshot.png"Response:
{
"url": "https://<tenant>.public.blob.vercel-storage.com/support/...png",
"filename": "screenshot.png",
"size": 148231,
"contentType": "image/png"
}The dashboard at /settings/support uses the same endpoint under the hood — paste a screenshot (Cmd+V), drop a file, or click to upload. Attachments show inline at the top of the GitHub issue so triagers see them first.
POST /api/support
Authed (session cookie or Authorization: Bearer dk_… API key). Rate-limited to 10 tickets per hour per org.
curl -X POST https://trydock.ai/api/support \
-H "Authorization: Bearer dk_live_..." \
-H "Content-Type: application/json" \
-d '{
"kind": "bug",
"title": "Table cell loses focus on paste",
"body": "Pasting into a text cell drops focus to the row below. Expected focus to stay on the edited cell.",
"attachmentUrls": [
"https://<tenant>.public.blob.vercel-storage.com/support/...png"
],
"context": {
"workspace": "launch-plan",
"browser": "Chrome 128 on macOS"
}
}'Response:
{
"id": "cmxxxxx",
"kind": "bug",
"title": "Table cell loses focus on paste",
"status": "open",
"githubNumber": 42,
"githubUrl": "https://github.com/try-dock-ai/support/issues/42",
"githubError": null,
"createdAt": "2026-04-19T…"
}If GitHub is temporarily unreachable we still persist the ticket and return githubNumber: null with githubError populated — the ticket is not lost, and ops retries on the admin side.
GET /api/support
Lists the authenticated org's tickets, most recent first (max 100).
curl https://trydock.ai/api/support \
-H "Authorization: Bearer dk_live_..."GET /api/support/[id]
Fetches one ticket, including its body + context. Scoped to your org.
MCP tool: create_support_ticket
Every agent connected to Dock via MCP gets this tool. When an agent hits an error, it can file the ticket without leaving its task:
{
"tool": "create_support_ticket",
"input": {
"kind": "bug",
"title": "row.patch returns 500 on long URL columns",
"body": "Got { code: 'internal', requestId: 'mo…' } when patching a URL column over 2kB.",
"context": { "requestId": "mo6fjc7q…", "workspace": "content-pipeline" }
}
}Ships with the 12 other MCP tools. See MCP server for the full tool list.
Where tickets go
Each ticket becomes a GitHub issue in try-dock-ai/support (private) with labels support, kind:<kind>, and from-api (plus from-agent when filed by an agent). Replies happen on the GitHub issue; the dashboard at /settings/support lists your org's tickets with the issue link.
When to use what
- Hit a plan cap? Use
request_limit_increase. It's purpose-built for that — no ticket, no reply loop. - Stripe / invoice question? Use
kind: "billing". - Broken code path?
kind: "bug"with thex-request-idheader value incontext. That's the fastest path to a fix.