Work Items
Callback event type
completedPossible values: Callback provider type
githubPossible values: Work item key (issue number for GitHub, work item ID for Azure DevOps)
42Project identifier (owner/repo)
flxbl-io/sf-coreWhether the work item was closed as part of this callback
trueRequest status updated
No content
Forbidden - Requires role: owner, application
No content
Project identifier to scope results. When omitted, returns requests across every project the caller can access.
flxbl-io/sf-coreFilter by status. Comma-separated for multiple: open,in_progress
open,in_progressFilter by platform
Filter by task type (e.g., execute-release, request-sandbox-create)
execute-releaseFilter by release candidate (e.g., core:RC-JAN25-01). Returns all requests targeting this RC.
core:RC-JAN25-01Filter by target repository identifier
flxbl-io/sf-coreFilter by actor email
user@example.comOnly requests created after this ISO 8601 timestamp
2026-01-01T00:00:00.000ZMaximum number of results
50Example: 50Offset for pagination
0Example: 0List of IssueOps requests
No content
Forbidden - Requires role: owner, member, application
No content
IssueOps request details
No content
Forbidden - Requires role: owner, member, application
Request not found
No content
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 - Signed-In User Provider Token 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 artifactsinstall-changeset- Install or validate a changeset artifactcreate-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 environmentunbundle-release-candidate- Remove commits from a release candidate branch
{"id":"request-sandbox-create","env":"dev","duration":"7"}Provider OAuth access token for user attribution. Optional.
Pass it when the signed-in user already holds a provider token (social-login). When omitted, the
server resolves the caller's linked provider identity (device flow) and acts as them — the
token stays server-side. If the caller has no usable linked identity, the request fails with
HTTP 428 PROVIDER_IDENTITY_RELINK_REQUIRED; the client should run the device flow
(/user/provider-identity/device/start → device/poll) and retry.
GitHub: OAuth provider token from login
Azure DevOps: OAuth provider token from login, sent to Azure DevOps as Authorization: Bearer <token>
provider-oauth-access-tokenLabels/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 Hatchet workflow 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
Unique identifier of the created work item
12345Human-readable key (issue number for GitHub, work item ID for Azure DevOps)
42Direct URL to the work item in the provider's UI
https://github.com/flxbl-io/sf-core/issues/42Platform where the work item was created
githubPossible values: ISO 8601 timestamp of when the work item was created
2025-01-20T12:00:00.000ZInvalid request - bad task type or missing required fields
Authentication failed - invalid or expired token
Forbidden - Requires role: owner, member
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":"john@example.com","avatarUrl":"https://example.com/avatar.png"},"reporter":{"id":"user456","name":"Jane Smith","email":"jane@example.com"},"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
10042DP-6Implement user authenticationstoryIn ProgressHighjirahttps://example.atlassian.net/browse/DP-6Forbidden - Requires role: owner, member, application
Last updated
Was this helpful?