Comprehensive guide for connecting FlowBoard to Jira Cloud, Server, and Data Center environments.
- Supported Jira Environments
- Authentication
- Required Permissions
- Data Fetching
- Custom Field Mapping
- Status Mapping
- Rate Limiting & Resilience
- Troubleshooting
| Environment | server_type |
Tested Versions |
|---|---|---|
| Jira Cloud | cloud |
Current |
| Jira Server | server |
8.x, 9.x |
| Jira Data Center | datacenter |
8.x, 9.x |
- Email + API token
- Generate at: https://id.atlassian.com/manage-profile/security/api-tokens
- Config:
auth_method: "basic",auth_email,auth_token - Or env vars:
FLOWBOARD_JIRA_EMAIL,FLOWBOARD_JIRA_TOKEN
{
"jira": {
"base_url": "https://yourcompany.atlassian.net",
"server_type": "cloud",
"auth_method": "basic",
"auth_email": "user@company.com",
"auth_token": "your-api-token"
}
}- Personal Access Token
- Generate in: Profile → Personal Access Tokens
- Config:
auth_method: "pat",auth_tokenonly - Or env var:
FLOWBOARD_JIRA_TOKEN
{
"jira": {
"base_url": "https://jira.company.com",
"server_type": "server",
"auth_method": "pat",
"auth_token": "your-personal-access-token"
}
}| Variable | Overrides Config Key |
|---|---|
FLOWBOARD_JIRA_TOKEN |
jira.auth_token |
FLOWBOARD_JIRA_EMAIL |
jira.auth_email |
FLOWBOARD_JIRA_URL |
jira.base_url |
- Environment variables always override config file values.
- Recommended for CI/CD pipelines and shared configurations.
- Keeps secrets out of version-controlled config files.
- Browse Projects on target projects
- Read access to boards and sprints (Jira Agile / Jira Software)
FlowBoard uses read-only APIs. No write permissions are needed.
| Data | API Endpoint | Purpose |
|---|---|---|
| Issues | /rest/api/2/search |
All issue data via JQL |
| Sprint data | /rest/agile/1.0/board/{id}/sprint |
Sprint metadata and dates |
| Board discovery | /rest/agile/1.0/board |
Find boards for projects |
| Server info | /rest/api/2/serverInfo |
Verify connectivity and type |
- Auto-built from
projectslist:project in (PROJ1, PROJ2) - Combined with optional
jql_filterusingAND - Ordered by
updated DESC - Paginated (default 100 per page, safety limit 50,000 issues)
Example with filter:
project in (PROJ1, PROJ2) AND status != Closed ORDER BY updated DESC
- Fetched from configured
boardsarray - Or auto-discovered from boards matching configured projects
- Deduplicated by sprint ID
- Includes active, closed, and future sprints
| Purpose | Config Key | Jira Default | How to Find |
|---|---|---|---|
| Story Points | field_mappings.story_points |
customfield_10016 |
Jira Admin → Custom Fields |
| Epic Link | field_mappings.epic_link |
customfield_10014 |
Issue JSON → fields object |
| Sprint | field_mappings.sprint |
customfield_10020 |
Usually auto-detected |
-
Via REST API:
curl -u user@company.com:API_TOKEN \ https://yourcompany.atlassian.net/rest/api/2/field \ | python -m json.tool | grep -A2 "Story Points"
-
Via Issue JSON:
- Open any issue in the browser
- Append
.jsonto the URL (Server) or use the REST API - Search the
fieldsobject for the value you expect
-
Via Jira Admin:
- Navigate to Jira Administration → Issues → Custom Fields
- Find the field and note its ID from the URL
Use the field_mappings.extra dictionary to map arbitrary custom fields:
{
"field_mappings": {
"story_points": "customfield_10016",
"epic_link": "customfield_10014",
"sprint": "customfield_10020",
"extra": {
"team": "customfield_10001",
"risk_level": "customfield_10050"
}
}
}The default mapping covers 16 common Jira statuses across three categories:
| Category | Default Statuses |
|---|---|
| To Do | Open, To Do, Backlog, New, Reopened, Created |
| In Progress | In Progress, In Review, In QA, Code Review, Testing, In Development |
| Done | Done, Closed, Resolved, Released |
Override or extend the defaults with status_mapping:
{
"status_mapping": {
"Ready for QA": "In Progress",
"Awaiting Deploy": "In Progress",
"Peer Review": "In Progress",
"Released to Staging": "In Progress",
"Released to Production": "Done",
"Won't Do": "Done",
"Triaged": "To Do"
}
}Unmapped statuses fall back to Jira's built-in status category.
- Automatic retry with exponential backoff on HTTP 429, 502, 503, 504
- Max 3 retries per request
- Max 30s backoff between retries
- Respects
Retry-Afterheader from Jira - 10s connect timeout / 60s read timeout
- Transient network error recovery (DNS failures, connection resets)
FlowBoard logs all retries and backoff durations for observability.
-
401 Unauthorized
- Check that your API token is valid and not expired.
- Ensure
auth_methodmatches your server type (basicfor Cloud,patfor Server/DC). - For Cloud: verify the email matches the token owner.
-
403 Forbidden
- Check that the account has Browse Projects permission.
- Verify API access is not restricted by your Jira administrator.
-
No issues returned
- Check that project keys match exactly (case-sensitive:
PROJnotproj). - Test your JQL in Jira's issue search to verify results.
- Check that
jql_filteris not too restrictive.
- Check that project keys match exactly (case-sensitive:
-
Missing sprints
- Check that
boardsare configured with correct board IDs. - Ensure the boards contain the target projects.
- Auto-discovery only finds Scrum boards.
- Check that
-
Missing story points
- Check that
field_mappings.story_pointsmatches your Jira instance. - Use the REST API to find the correct custom field ID.
- Check that
-
Custom fields not mapped
- Add the field to
field_mappings.extrawith its custom field ID.
- Add the field to
-
Status categories wrong
- Add custom mappings to
status_mappingfor your workflow statuses.
- Add custom mappings to
Run the verify command to test connectivity and permissions:
flowboard verify --config config.jsonThis checks:
- Server reachability
- Authentication validity
- Project accessibility
- Board and sprint access