jira2py
A type-safe Python client for the Jira Cloud REST API v3. Use it to read and search issues, create and edit issues, transition workflows, and work with comments, attachments, links, worklogs, projects, metadata, users, and saved filters.
Scope
jira2py supports Jira Cloud and Python 3.11+. It does not support Jira Server or Data Center, board/sprint/epic workflows, issue deletion or archiving, or a dedicated issue-assignment API.
Install
pip install jira2py
Authenticate safely
Create an Atlassian API token, then provide your Cloud URL, Atlassian account email, and token. Without credentials_file, each credential uses a non-empty explicit url, username, or api_token argument, then its JIRA_URL, JIRA_USER, or JIRA_API_TOKEN environment variable.
When you supply credentials_file, jira2py first loads and validates it as a complete set: the JSON must contain non-empty url, username, and api_token values. A partial file cannot be completed from explicit arguments or environment variables; after validation, non-empty explicit arguments override their matching file values.
There is no default credentials-file path. Keep tokens out of source control, logs, and error reports; use environment variables or a protected local JSON file instead.
export JIRA_URL="https://your-domain.atlassian.net"
export JIRA_USER="your-email@example.com"
export JIRA_API_TOKEN="your-api-token"
{
"url": "https://your-domain.atlassian.net",
"username": "your-email@example.com",
"api_token": "your-api-token"
}
Pass the JSON file only when needed:
from jira2py import JiraAPI
jira = JiraAPI(credentials_file="./jira-credentials.json")
Choose an API layer
JiraAPIis the low-level, endpoint-oriented interface. Operations return parsed Jira JSON-like data when available; downloads return bytes and operations without a response body returnNone.JiraHelpersprovides grouped workflows and readableHelperResultvalues, with optional structured data, for common tasks.format_issueis an optional pure presentation function for an issue response you already retrieved.
Use JiraAPI when you want direct REST payloads and endpoint control. Full issue retrieval is performed only by jira.issues.get_issue():
from jira2py import JiraAPI
jira = JiraAPI()
issue = jira.issues.get_issue("PROJECT-123", fields=["summary", "status"])
results = jira.search.enhanced_search("project = PROJECT AND status = 'In Progress'")
Use format_issue only when you want readable text in addition to that structured response. It does not fetch data or change the response:
from jira2py import JiraAPI
from jira2py.helpers import JiraHelpers, format_issue
api = JiraAPI()
issue = api.issues.get_issue(
"PROJECT-123",
fields=["summary", "status", "description"],
)
print(format_issue(issue, browse_url=f"{api.credentials.url}/browse/{issue['key']}"))
helpers = JiraHelpers(api)
print(helpers.metadata.transitions("PROJECT-123").text)
print(helpers.attachments.list("PROJECT-123").text)
Structured issue-read migration
Issue reads no longer use a helper or a comma-delimited fields string. Pass one exact selector per sequence item, then optionally format the returned data:
# Before (removed)
from jira2py.helpers import JiraHelpers
helpers = JiraHelpers(api)
api.issues.get_issue("PROJECT-123", fields="summary,status")
helpers.issues.read("PROJECT-123", extra_fields=["customfield_10001"])
# After
issue = api.issues.get_issue(
"PROJECT-123",
fields=["summary", "status", "customfield_10001"],
)
text = format_issue(
issue,
browse_url=f"{api.credentials.url}/browse/{issue['key']}",
)
The supplied selector sequence is forwarded unchanged: jira2py does not add fields, deduplicate selectors, or request an expansion. None omits fields and lets Jira choose its default unless raw extra_params["fields"] overrides it. Wildcards and negative selectors such as "*all" and "-description" can still return broad responses; choose projections deliberately.
Documentation
- Installation
- Configuration and credential details
- High-level helpers
- API reference
- Full documentation
- Machine-readable documentation and complete reference
License
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file jira2py-0.9.0.tar.gz.
File metadata
- Download URL: jira2py-0.9.0.tar.gz
- Upload date:
- Size: 69.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ed43bd68fd8dcc30f40c27b786e4aa269c571915e2cff3f8608e2f5d1da78bc1
|
|
| MD5 |
1cea16172379522a7caa6a790b0c702c
|
|
| BLAKE2b-256 |
3a3459082d6c3461ac047a507b362991850a7ada8b34015f8416fe40b78fc711
|
Provenance
The following attestation bundles were made for jira2py-0.9.0.tar.gz:
Publisher:
publish.yml on en-ver/jira2py
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
jira2py-0.9.0.tar.gz -
Subject digest:
ed43bd68fd8dcc30f40c27b786e4aa269c571915e2cff3f8608e2f5d1da78bc1 - Sigstore transparency entry: 2572095960
- Sigstore integration time:
-
Permalink:
en-ver/jira2py@430adef69d75165170676b7cb84a65ea9a0cb335 -
Branch / Tag:
refs/tags/v0.9.0 - Owner: https://github.com/en-ver
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@430adef69d75165170676b7cb84a65ea9a0cb335 -
Trigger Event:
push
-
Statement type:
File details
Details for the file jira2py-0.9.0-py3-none-any.whl.
File metadata
- Download URL: jira2py-0.9.0-py3-none-any.whl
- Upload date:
- Size: 58.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6a414c8c4d1a8ff373e014015644ac5bfa713d56717d574bad68346154e844f2
|
|
| MD5 |
e7bb3575a3f42f9d6d6c0009419e1fb3
|
|
| BLAKE2b-256 |
5cb7bbf616c66da63a91c0f9af5a48f1f17453fd4ba086658affc0c93b1feb75
|
Provenance
The following attestation bundles were made for jira2py-0.9.0-py3-none-any.whl:
Publisher:
publish.yml on en-ver/jira2py
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
jira2py-0.9.0-py3-none-any.whl -
Subject digest:
6a414c8c4d1a8ff373e014015644ac5bfa713d56717d574bad68346154e844f2 - Sigstore transparency entry: 2572096036
- Sigstore integration time:
-
Permalink:
en-ver/jira2py@430adef69d75165170676b7cb84a65ea9a0cb335 -
Branch / Tag:
refs/tags/v0.9.0 - Owner: https://github.com/en-ver
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@430adef69d75165170676b7cb84a65ea9a0cb335 -
Trigger Event:
push
-
Statement type: