{"openapi":"3.1.0","info":{"title":"TaskP3 Triage API","version":"1.0.0","description":"API reference for triage submissions, responses, and files. All routes require a TaskP3 API key (machine user)."},"tags":[{"name":"Triage","description":"Triage submissions and responses."}],"servers":[{"url":"/"}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"http","scheme":"bearer","bearerFormat":"API key"}},"schemas":{},"parameters":{}},"paths":{"/triage/{projectId}/task":{"post":{"summary":"Create triage task submission","description":"Requires a TaskP3 API key (machine user). Access is scoped to the key's organization and project memberships. Requires Task:CreateOwn and Project:ReadOwn.","tags":["Triage"],"security":[{"ApiKeyAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"projectId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"taskName":{"type":"string"},"description":{"type":"string"},"path":{"type":"string","description":"Alias for url used by the SDK and CP9-style hosts."},"tags":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"text":{"type":"string"}},"required":["label","text"]},"description":"The tags to create / attach to the task"},"url":{"type":"string","description":"The url of where the triage was reported from"},"metaData":{"type":"object","additionalProperties":{"nullable":true}},"fileIds":{"type":"array","items":{"type":"string"},"description":"The ids of the files to attach to the task"},"externalCreatedById":{"type":"string","description":"The id in your app of the user who created the task"},"externalCreatedByName":{"type":"string","description":"The name of the user who created the task"},"externalCreatedByType":{"type":"string","default":"user","description":"The type of the user who created the task default is user."},"type":{"type":"string","enum":["Problem","Feedback","Question"],"default":"Problem","description":"The type of the triage submission can be Problem, Feedback, or Question"},"isSlate":{"type":"boolean","default":false,"description":"Whether the submission is in slate format already."}}}}}},"responses":{"200":{"description":"Created triage task submission.","content":{"application/json":{"schema":{"type":"object","properties":{},"description":"Successful response."}}}}}}},"/triage/task/{taskId}":{"get":{"summary":"Get triage task submission","description":"Requires a TaskP3 API key (machine user). Access is scoped to the key's organization and project memberships. Requires Task:CreateOwn and Project:ReadOwn.","tags":["Triage"],"security":[{"ApiKeyAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"taskId","in":"path"}],"responses":{"200":{"description":"Triage task submission.","content":{"application/json":{"schema":{"type":"object","properties":{},"description":"Successful response."}}}}}}},"/triage/{projectId}/tasks":{"get":{"summary":"List triage task submissions","description":"Requires a TaskP3 API key (machine user). Access is scoped to the key's organization and project memberships. Requires Task:CreateOwn and Project:ReadOwn.","tags":["Triage"],"security":[{"ApiKeyAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"projectId","in":"path"},{"schema":{"type":"string"},"required":false,"name":"externalCreatedById","in":"query"},{"schema":{"type":"string","enum":["Problem","Feedback","Question"]},"required":false,"name":"type","in":"query"},{"schema":{"type":"boolean"},"required":false,"name":"open","in":"query"},{"schema":{"type":"string","enum":["ASC","DESC"],"default":"DESC"},"required":false,"name":"sortOrder","in":"query"},{"schema":{"type":"number","nullable":true},"required":false,"name":"page","in":"query"},{"schema":{"type":"number","nullable":true},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string","description":"Search term to filter tasks by name or submission content"},"required":false,"description":"Search term to filter tasks by name or submission content","name":"searchTerm","in":"query"}],"responses":{"200":{"description":"List of triage task submissions.","content":{"application/json":{"schema":{"type":"object","properties":{},"description":"Successful response."}}}}}}},"/triage/task/{taskId}/response":{"post":{"summary":"Create triage task response","description":"Requires a TaskP3 API key (machine user). Access is scoped to the key's organization and project memberships. Requires Task:CreateOwn.","tags":["Triage"],"security":[{"ApiKeyAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"taskId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"response":{"type":"string","description":"The response to the triage submission. Requires isSlate: true if submitting in slate format."},"externalCreatedById":{"type":"string","description":"The id in your app of the user who created the response"},"externalCreatedByName":{"type":"string","description":"The name of the user who created the response"},"externalCreatedByType":{"type":"string","description":"The type of the user who created the response"},"fileIds":{"type":"array","items":{"type":"string"},"description":"The ids of the files to attach to the response"},"isSlate":{"type":"boolean","default":false,"description":"Whether the response is in slate format"}},"required":["response","externalCreatedById","externalCreatedByName","externalCreatedByType"]}}}},"responses":{"200":{"description":"Created response.","content":{"application/json":{"schema":{"type":"object","properties":{},"description":"Successful response."}}}}}}},"/triage/task/{taskId}/responses":{"get":{"summary":"List triage task responses","description":"Requires a TaskP3 API key (machine user). Access is scoped to the key's organization and project memberships. Requires Task:ReadOwn.","tags":["Triage"],"security":[{"ApiKeyAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"taskId","in":"path"},{"schema":{"type":"number","nullable":true},"required":false,"name":"page","in":"query"},{"schema":{"type":"number","nullable":true},"required":false,"name":"limit","in":"query"}],"responses":{"200":{"description":"List of responses.","content":{"application/json":{"schema":{"type":"object","properties":{},"description":"Successful response."}}}}}}},"/triage/task/{taskId}/submission/file":{"post":{"summary":"Create triage submission file","description":"Requires a TaskP3 API key (machine user). Access is scoped to the key's organization and project memberships. Requires File:CreateOwn.","tags":["Triage"],"security":[{"ApiKeyAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"taskId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"fileName":{"type":"string"},"contentType":{"type":"string"},"fileSize":{"type":"number","minimum":0,"exclusiveMinimum":true,"maximum":52428800}},"required":["fileName","contentType","fileSize"]}}}},"responses":{"200":{"description":"Created file.","content":{"application/json":{"schema":{"type":"object","properties":{},"description":"Successful response."}}}}}}},"/triage/response/{responseId}/file":{"post":{"summary":"Create triage response file","description":"Requires a TaskP3 API key (machine user). Access is scoped to the key's organization and project memberships. Requires File:CreateOwn.","tags":["Triage"],"security":[{"ApiKeyAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"responseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"fileName":{"type":"string"},"contentType":{"type":"string"},"fileSize":{"type":"number","minimum":0,"exclusiveMinimum":true,"maximum":52428800}},"required":["fileName","contentType","fileSize"]}}}},"responses":{"200":{"description":"Created file.","content":{"application/json":{"schema":{"type":"object","properties":{},"description":"Successful response."}}}}}}},"/triage/task/{taskId}/submission/files":{"get":{"summary":"List triage submission files","description":"Requires a TaskP3 API key (machine user). Access is scoped to the key's organization and project memberships. Requires File:ReadOwn.","tags":["Triage"],"security":[{"ApiKeyAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"taskId","in":"path"},{"schema":{"type":"number","nullable":true},"required":false,"name":"page","in":"query"},{"schema":{"type":"number","nullable":true},"required":false,"name":"limit","in":"query"}],"responses":{"200":{"description":"List of files.","content":{"application/json":{"schema":{"type":"object","properties":{},"description":"Successful response."}}}}}}},"/triage/response/{responseId}/files":{"get":{"summary":"List triage response files","description":"Requires a TaskP3 API key (machine user). Access is scoped to the key's organization and project memberships. Requires File:ReadOwn.","tags":["Triage"],"security":[{"ApiKeyAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"responseId","in":"path"},{"schema":{"type":"number","nullable":true},"required":false,"name":"page","in":"query"},{"schema":{"type":"number","nullable":true},"required":false,"name":"limit","in":"query"}],"responses":{"200":{"description":"List of files.","content":{"application/json":{"schema":{"type":"object","properties":{},"description":"Successful response."}}}}}}},"/triage/file/{fileId}":{"get":{"summary":"Get triage file presigned URL","description":"Requires a TaskP3 API key (machine user). Access is scoped to the key's organization and project memberships. Requires File:ReadOwn.","tags":["Triage"],"security":[{"ApiKeyAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"fileId","in":"path"}],"responses":{"200":{"description":"Presigned URL response.","content":{"application/json":{"schema":{"type":"object","properties":{},"description":"Successful response."}}}}}}},"/triage/file":{"post":{"summary":"Create triage file","description":"Requires a TaskP3 API key (machine user). Access is scoped to the key's organization and project memberships. Requires File:CreateOwn.","tags":["Triage"],"security":[{"ApiKeyAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"projectId":{"type":"string","format":"uuid"},"fileName":{"type":"string"},"contentType":{"type":"string"},"fileSize":{"type":"number","minimum":0,"exclusiveMinimum":true,"maximum":52428800}},"required":["fileName","contentType","fileSize"]}}}},"responses":{"200":{"description":"Created file.","content":{"application/json":{"schema":{"type":"object","properties":{},"description":"Successful response."}}}}}}},"/triage/{projectId}/changelog":{"get":{"summary":"List published changelog entries","description":"Requires a TaskP3 API key (machine user). Access is scoped to the key's organization and project memberships. Requires Task:CreateOwn and Project:ReadOwn.","tags":["Triage"],"security":[{"ApiKeyAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"projectId","in":"path"},{"schema":{"type":"number","nullable":true,"description":"Page number (default: 1)"},"required":false,"description":"Page number (default: 1)","name":"page","in":"query"},{"schema":{"type":"number","nullable":true,"description":"Number of changelog entries per page (default: 10)"},"required":false,"description":"Number of changelog entries per page (default: 10)","name":"limit","in":"query"},{"schema":{"type":"number","nullable":true,"description":"Number of code changes to return per entry (default: 5). Use the /changelog/:changelogId/code-changes endpoint to paginate through all code changes."},"required":false,"description":"Number of code changes to return per entry (default: 5). Use the /changelog/:changelogId/code-changes endpoint to paginate through all code changes.","name":"codeChangesLimit","in":"query"},{"schema":{"type":"string","description":"Comma-separated list of types to filter by (Bug fix, New Feature, Improvement, Deprecation)"},"required":false,"description":"Comma-separated list of types to filter by (Bug fix, New Feature, Improvement, Deprecation)","name":"types","in":"query"},{"schema":{"type":"string","description":"Comma-separated list of server-derived viewer audience keys. Code changes with no audience keys are visible to everyone."},"required":false,"description":"Comma-separated list of server-derived viewer audience keys. Code changes with no audience keys are visible to everyone.","name":"audienceKeys","in":"query"}],"responses":{"200":{"description":"List of published changelog entries.","content":{"application/json":{"schema":{"type":"object","properties":{},"description":"Successful response."}}}}}}},"/triage/changelog/{changelogId}/code-changes":{"get":{"summary":"List code changes for a changelog entry","description":"Requires a TaskP3 API key (machine user). Access is scoped to the key's organization and project memberships. Requires Task:CreateOwn.","tags":["Triage"],"security":[{"ApiKeyAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"changelogId","in":"path"},{"schema":{"type":"number","nullable":true,"description":"Page number (default: 1)"},"required":false,"description":"Page number (default: 1)","name":"page","in":"query"},{"schema":{"type":"number","nullable":true,"description":"Number of code changes per page (default: 20)"},"required":false,"description":"Number of code changes per page (default: 20)","name":"limit","in":"query"},{"schema":{"type":"string","description":"Comma-separated list of types to filter by (Bug fix, New Feature, Improvement, Deprecation)"},"required":false,"description":"Comma-separated list of types to filter by (Bug fix, New Feature, Improvement, Deprecation)","name":"types","in":"query"},{"schema":{"type":"string","description":"Comma-separated list of server-derived viewer audience keys"},"required":false,"description":"Comma-separated list of server-derived viewer audience keys","name":"audienceKeys","in":"query"}],"responses":{"200":{"description":"List of code changes.","content":{"application/json":{"schema":{"type":"object","properties":{},"description":"Successful response."}}}}}}}}}