Skip to content

Jira integration

One-way import from Jira Cloud into sprintrr. Encrypted token storage, idempotent re-imports, no write-back to Jira.

sprintrr's M4 feature is a one-way import from Jira Cloud. Connect a workspace, pick a project, preview the field mapping, import. Re-running the import updates existing tasks instead of duplicating them.

When to use it

  • You already use Jira and want to evaluate sprintrr's AI features (status updates, transcripts → tasks, risk register, date cascades) on your real data — without re-typing 80 issues.
  • You want a one-time migration into sprintrr but keep Jira as the archival source for past work.
  • You want to use sprintrr as a sandbox / what-if planner alongside Jira, with periodic re-syncs.

What we do NOT do (yet)

  • Two-way sync — sprintrr never writes back to Jira. Out of scope for v1; in roadmap for later if there's customer pull.
  • OAuth 2.0 (3LO) — v1 uses API token + email. OAuth is M4.5.
  • JQL filters / sprint scoping — v1 imports the top N issues ordered by updated DESC. Custom JQL is M4.5.
  • Custom field mapping — we map the standard fields (see below) and ignore custom fields in v1.
  • Auto-create milestones — we map Jira epics to existing milestones by title. We don't create new milestones from epics automatically to avoid silently spawning rows.

Setup

  1. Go to Settings → Jira integration.
  2. Paste your Jira Cloud URL (e.g. https://yourcompany.atlassian.net).
  3. Create an Atlassian API token:
    • Open id.atlassian.com/manage-profile/security/api-tokens.
    • Click Create API token. (Atlassian also exposes a separate Create API token with scopes button — both work. Scopes are optional but recommended; if you scope, grant read:jira-user and read:jira-work for full import coverage.)
    • Give the token a name (e.g. "sprintrr").
    • Set an expiry. As of December 15, 2024 the default is 1 year; you can choose 1–365 days. Pre-2024 perpetual tokens have all been auto-expired by Atlassian.
    • Atlassian may prompt you for a one-time passcode (password / 3rd-party logins only — SSO and service accounts skip this).
    • Copy the token immediately — it's only shown once.
  4. Paste your Atlassian email + the token into sprintrr.
  5. Click Connect & verify — sprintrr calls /rest/api/3/myself to validate the credentials before persisting. If Atlassian rejects them, you get the exact error inline.

The token is encrypted at rest with AES-256-GCM (the same BYOK_ENCRYPTION_KEY used for user-supplied AI keys). It never leaves the server decrypted. When the token expires (1 year by default), sprintrr will surface a clear connection-failed error on the next import — generate a new token and reconnect.

Running an import

  1. Click Import on the integration card.
  2. Wizard: Pick Jira projectPreview mappingPick destination sprintrr projectRun.
  3. Imports cap at 100 issues by default (hard cap 200 in v1). Status bar reports counts when done.

Re-importing the same Jira project updates existing tasks (matched by the Jira issue key stored in tasks.external_id). The mapped fields get overwritten with the latest values from Jira.

Field mapping

Jira→ sprintrr
summarytitle (truncated to 200 chars)
description (ADF)description (flattened to plain text)
status.statusCategory (done / indeterminate / new)status (Completed / In Progress / Not Started)
status name matching block / impediment, or label blockedstatus = Blocked
priority.namepriority (Highest/Critical → High, Low/Trivial → Low, else Medium)
issuetype.namecategory (Bug → Testing, Story → Development, Epic → Strategy, …)
assignee.emailAddressassigned_to[] (only matched if the email exists in user_profiles)
duedatedue_date
parent.fields.summary (epic)milestone_id (matched against existing milestones by title)
key + browse URLexternal_id + external_url (renders the "Imported from Jira" badge)

MCP usage

Imports aren't currently exposed via MCP — the wizard is the only interface. We may add an MCP import-from-jira action in a later pass if there's demand from Claude Desktop / Cursor users.

Security + audit

  • Token: AES-256-GCM encrypted with BYOK_ENCRYPTION_KEY, stored as bytea in jira_integrations.encrypted_api_token. Decrypted only in-memory for each Jira API call.
  • All actions audited: JIRA_CONNECTED, JIRA_REVOKED, JIRA_IMPORT_STARTED, JIRA_IMPORT_COMPLETED, JIRA_IMPORT_FAILED.
  • Import emits an imported_from_jira activity event on the destination sprintrr project.
  • Job history visible at Settings → Jira integration → Recent imports.
  • RLS: only the owning user can see their integration row or import job rows.

Roadmap

  • JQL filter on the import wizard for projects with thousands of issues.
  • Background-job chunking for >200-issue imports.
  • OAuth 2.0 (3LO) instead of API token.
  • Asana / Linear / ClickUp importers built on the same external_* provenance contract.
  • Two-way sync — only if customers ask. Bidirectional sync is a large surface (webhooks, conflict UX, sync state) and not always what users want.