Work Items
How It Works
Prerequisites
1. Project Configuration
# Set via CLI
sfp server project update -r flxbl-io/sf-core \
-p configuration.workItems \
-v '{"provider": "azure-devops"}'
# Or via API
PATCH /projects/flxbl-io%2Fsf-core
{
"property": "configuration.workItems",
"value": { "provider": "azure-devops" }
}2. Authentication - User PAT Required
Valid Task Types
Flow Triggering
Payload Embedding
Project identifier as registered in sfp server. Must match the project's workItems.provider configuration.
flxbl-io/sf-coreWork item title. Use a descriptive prefix like [Request] for IssueOps workflows.
[Request] Provision Scratch Org for DevelopmentWork item body/description. The task payload will be appended to this.
Please provision a new scratch org for the development team. Duration: 7 daysTask payload with id matching a registered task type. Valid types:
request-elevated-privileges- Request temporary elevated accessrequest-freeze-users- Freeze users in an environmentrequest-unfreeze-users- Unfreeze usersrequest-sandbox-create- Create a new sandboxrequest-sandbox-refresh- Refresh sandbox from sourcerequest-sandbox-delete- Delete a sandboxinstall-packages- Install managed/unlocked packagesinstall-artifacts- Install build artifactscreate-patch-branch- Create a patch branchrun-apex-tests- Execute Apex testsrequest-a-release-to-release-envs- Request release deployment to environments (orchestrator)execute-release- Execute release to a single environment
{"id":"request-sandbox-create","env":"dev","duration":"7"}Personal Access Token (PAT) for authentication. Required for proper user attribution.
Why PAT is Required: Work items are created on behalf of the actual user for proper audit trail. When using a PAT, the work item shows the user as the creator, making it clear who initiated the request. Using server-stored credentials would attribute all work items to the integration service account.
GitHub: Token with repo (private) or public_repo (public) scope
Azure DevOps: PAT with "Work Items: Read & Write" scope
ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxLabels/tags to apply to the work item. Used for filtering and automation triggers.
["issueops","sandbox","automation"]Assignees for the work item.
GitHub: Array of GitHub usernames Azure DevOps: Array of email addresses
["john-doe"]GitHub only: Milestone number or title to associate with the issue
Sprint 23Azure DevOps only: Work item type. Common types depend on the process template:
- Basic: Issue, Epic, Task
- Agile: Bug, User Story, Task, Epic
- Scrum: Bug, Product Backlog Item, Task, Epic
TaskAzure DevOps only: Area path for categorization. Use backslashes to separate hierarchy.
sf-core\Team AlphaAzure DevOps only: Iteration path for sprint assignment. Use backslashes to separate hierarchy.
sf-core\Sprint 23Azure DevOps only: Priority level (1 = highest, 4 = lowest)
2Azure DevOps only: Organization URL.
Optional if configured in project settings. The server first checks the project's configuration.workItems.organizationUrl.
Only provide this to override the project configuration or if not configured at the project level.
Configure at project level via:
PATCH /projects/{identifier}
{ "property": "configuration.workItems", "value": { "organizationUrl": "https://dev.azure.com/org", "project": "proj" } }
https://dev.azure.com/flxbl-ioAzure DevOps only: Project name within the organization.
Optional if configured in project settings. The server first checks the project's configuration.workItems.project.
Only provide this to override the project configuration or if not configured at the project level.
sf-coreControls whether to trigger the Windmill flow immediately after creating the work item.
When to set triggerFlow: true:
- You want to trigger the flow immediately without waiting for webhook events
- The work item is being created programmatically (e.g., from a UI or automation)
- You don't have IssueOps webhooks configured for label-based triggering
When to set triggerFlow: false (default):
- You're using the IssueOps pattern where GitHub/Azure DevOps webhooks trigger flows based on labels
- You want manual control over when the flow starts (e.g., after review)
- The work item is for tracking purposes only
When true:
- The flow is triggered synchronously after work item creation
- The work item becomes the callback destination for flow notifications
- The response includes
flowExecutiondetails with the execution ID
When false (default):
- Only the work item is created
- Flow must be triggered separately (via webhook, label, or manual API call)
falseExample: trueWork item created successfully
Invalid request - bad task type or missing required fields
Authentication failed - invalid or expired token
Forbidden - Requires role: owner, application
Project not found
Platform where the work item exists
Work item ID or key
Work item updated successfully
No content
Invalid request or platform not supported
Forbidden - Requires role: owner, application
Work item not found
No content
Platform where the work item exists
Work item ID or key
Work item closed successfully
No content
Invalid request or platform not supported
Forbidden - Requires role: owner, application
Work item not found
No content
Work item ID or key
{"value":"DP-6","summary":"Jira issue key"}Project identifier (e.g., owner/repo)
flxbl-io/sf-coreWork item retrieved successfully
{"id":"10042","key":"DP-6","title":"Implement user authentication","description":"Add OAuth 2.0 authentication flow","type":"story","status":"In Progress","priority":"High","assignee":{"id":"user123","name":"John Doe","email":"[email protected]","avatarUrl":"https://example.com/avatar.png"},"reporter":{"id":"user456","name":"Jane Smith","email":"[email protected]"},"labels":["backend","security"],"createdAt":"2025-01-10T08:00:00.000Z","updatedAt":"2025-01-11T14:30:00.000Z","platform":"jira","url":"https://flxbl-demo.atlassian.net/browse/DP-6","parent":{"id":"10040","key":"DP-1","title":"Authentication Epic"},"customFields":{"projectKey":"DP","projectName":"Demo Project","issueTypeId":"10001","statusId":"3"}}Forbidden - Requires role: owner, member, application
Work item or project not found
Prerequisites
# Configure provider and boards (Jira project keys)
sfp server project update -r owner/repo \
-p configuration.workItems \
-v '{"provider": "jira", "boards": ["DP", "PROJ"]}'
# Configure provider and boards (Azure DevOps area paths)
sfp server project update -r owner/repo \
-p configuration.workItems \
-v '{"provider": "azure-devops", "boards": ["MyProject\\Team1"]}'Filter Examples
# List work items (uses boards from project config)
GET /work-items?projectIdentifier=owner/repo
# Filter by status
GET /work-items?projectIdentifier=owner/repo&status=In Progress
# Filter by assignee
GET /work-items?projectIdentifier=owner/repo&assignee=john.doe
# Filter by type with limit
GET /work-items?projectIdentifier=owner/repo&type=bug&maxResults=10Project identifier (e.g., owner/repo)
flxbl-io/sf-coreFilter by work item status (e.g., "To Do", "In Progress", "Done")
In ProgressFilter by assignee username or email
john.doeFilter by work item type (e.g., "bug", "story", "task", "epic")
storyMaximum number of results to return (1-100, default: 50)
50Work items retrieved successfully
Forbidden - Requires role: owner, member, application
Last updated