Parameters
1 query
Query parameters
· 1issueKeystringRequiredIssue key (e.g. "PROJ-123").
PROJ-123Returns full issue detail including description, project info, assignee, reporter, parent issue, due date, and linked URLs. Returns { exist: false } if the issue is not found.
1 query
issueKeystringRequiredIssue key (e.g. "PROJ-123").
PROJ-1231 status code documented
idstringRequiredIssue key.
internalIdnumberRequiredInternal numeric ID.
externalIdstringRequiredImmutable 16-char alphanumeric public identifier (pm__issue.external_id). Used in customer-facing URLs (support portal, e-mail deep links, [BKH-ISSUE:xxxxxxxxxxxxxxxx] tokens) and for cross-system references — never changes across the ticket's lifetime, unlike issueKey which is tied to the project prefix and could theoretically re-key on a merge.
issueKeystringRequiredIssue key (e.g. "PROJ-123").
subjectstringRequiredIssue subject/title.
descriptionstringRequiredIssue description (HTML).
internalDescriptionstring | nullRequiredInternal notes visible only to team members.
aiSummarystring | nullRequiredLLM-produced short paraphrase of the description in the reporter's language (~400 chars). Read-only in the admin UI — writes only originate from the inbound-mail classifier, updateIssue regen when the description is edited, or the explicit /bff/issue/generate-summary button. null when no summary has been generated yet.
prioritynumberRequiredPriority (1-5).
priorityLabelstringRequiredHuman-readable priority label.
projectKeystringRequiredProject key (e.g. "PROJ").
projectNamestringRequiredProject display name.
typeobjectRequiredidnumberRequiredIssue type ID (pm__issue_type.id).
codestringRequiredStable slug (story, epic, task, sub_task, bug, …). Admin resolves the localized label from its dictionary.
iconstring | nullRequiredLucide icon name to render alongside the subject.
statusobjectRequiredidnumberRequiredStatus ID.
labelstringRequiredStatus display label (localized to the viewing organisation).
categoryIdnumberRequiredStatus category ID (1=new, 2=progress, 3=waiting, 4=done).
categoryCodestringRequiredStatus category code.
assigneeobject | nullRequiredidnumberRequiredContact ID.
externalIdstring | nullRequiredPublic contact identifier used in admin URLs (/contact/{externalId}) and in /bff/contact/detail?customerId=.... null for legacy rows that predate the external-id backfill; the UI should render the name without a link in that case.
namestringRequiredFull name.
emailstring | nullRequiredContact e-mail. null for phone-only contacts (no e-mail registered) and for contacts anonymised via GDPR. UI should fall back to name or the contact ID.
reporterobject | nullRequiredidnumberRequiredContact ID.
externalIdstring | nullRequiredPublic contact identifier used in admin URLs (/contact/{externalId}) and in /bff/contact/detail?customerId=.... null for legacy rows that predate the external-id backfill; the UI should render the name without a link in that case.
namestringRequiredFull name.
emailstring | nullRequiredContact e-mail. null for phone-only contacts (no e-mail registered) and for contacts anonymised via GDPR. UI should fall back to name or the contact ID.
isSpamboolean | nullRequiredSpam classification. Null = not yet classified.
parentIdnumber | nullRequiredInternal ID of the parent issue (for sub-tasks or merged children).
parentobject | nullRequiredPopulated when this issue has been merged into another via /bff/issue/merge (or filed as a sub-task with a parent). The admin renders a prominent "merged into" callout linking here. null for regular top-level issues.
issueKeystringRequiredParent issue key — use in /issue/{issueKey} for the FE link.
subjectstringRequiredParent subject, rendered inline in the "merged into" callout.
statusCategoryCodestringRequiredCanonical bucket code (new / progress / waiting / done) so the FE can dot-color the callout.
dueDateDate | string | string | number | nullRequiredDue date.
Due date.
testUrlstring | nullRequiredURL to test environment.
documentationUrlstring | nullRequiredURL to documentation.
humanOnlybooleanRequiredWhen true, runIssueAgent aborts and never touches this ticket. Set by operators for tickets that need human judgement (legal escalation, incident, VIP).
insertedDateDate | string | string | numberRequiredWhen the issue was created.
When the issue was created.
updatedDateDate | string | string | number | nullRequiredLast update timestamp.
Last update timestamp.
attachmentsobject[]RequiredFiles linked to the issue via pm__issue_attachment. Empty when the issue has none.
blobTokenstringRequiredcore__blob.token — pass to
filenamestringRequiredOriginal filename as stored on the blob. Never null — when the blob was ingested without a filename (e.g. an inbound e-mail attachment with a missing Content-Disposition: filename=…), the endpoint substitutes a priloha.<ext> placeholder derived from the MIME type.
contentTypestringOptionalMIME type.
sizenumberRequiredFile size in bytes.
downloadUrlstringRequiredSigned direct-download URL to the storage bucket.
positionnumberRequiredDisplay order within the issue (1-based).
sourceEmailsobject[]RequiredInbound-mail rows linked via brj__emailer_received_email.issue_id. Ordered oldest first — the first entry is the originating mail that lifted the ticket. Empty when the issue was not created from mail.
externalIdstringRequiredPublic 16-char identifier of the inbound mail — use in /emailer/received/:externalId for the admin link.
subjectstringRequiredSubject as received from Resend.
fromAddressstringRequiredEnvelope From address.
receivedAtDate | string | string | numberRequiredWhen Resend received the message.
When Resend received the message.
ipnull | objectRequiredReporter geolocation snapshot resolved from the request IP at ticket creation. Same shape as the order-detail ip block so the admin can reuse the same rendering component. null for tickets created without request-time IP context (cron, mail pipeline, manual admin entry). Admin hides the block for 127.0.0.1.
ipstringRequiredReporter IP address (brj__geo_ip.ip).
citystring | nullRequiredCity name (brj__geo_ip_city.city).
countrystring | nullRequiredCountry name (brj__geo_ip_city.country).
countryRegionstring | nullRequiredISO 3166-2 country subdivision (brj__geo_ip_city.country_region).
latitudenumber | nullRequiredCity-center latitude (brj__geo_ip_city.latitude).
longitudenumber | nullRequiredCity-center longitude (brj__geo_ip_city.longitude).
hostnamestring | nullRequiredReverse-DNS hostname (brj__geo_ip.hostname), when resolved.
timezonestring | nullRequiredIANA timezone (cas__timezone.timezone) resolved via brj__geo_ip.timezone_id.
mobilebooleanRequiredtrue when ip-api flagged the IP as a mobile carrier network. Defaults to false when the enrichment has not yet run.
proxybooleanRequiredtrue when ip-api flagged the IP as an anonymising proxy / VPN. Defaults to false when the enrichment has not yet run.
hostingbooleanRequiredtrue when ip-api flagged the IP as hosting infrastructure (data-center, cloud provider). Defaults to false when the enrichment has not yet run.
torboolean | nullRequiredtrue when the IP is on the TOR exit-node list at the time the ticket was created. null when TOR classification has not yet been resolved (distinct from a known non-TOR false).
originChannelnull | objectRequiredEntry point that created the issue, resolved via pm__issue.origin_channel_id → pm__issue_origin_channel. null for pre-migration rows and paths that do not yet pass a channel code. Rendered as "Zdroj: …" in the admin sidebar Details card.
codestringRequiredStable machine identifier of the entry point (contact_form, mail_in, admin, api, cron, agent) from pm__issue_origin_channel.code. Opaque to the admin — used as a lookup key into the FE i18n dictionary.
labelstringRequiredCanonical Czech label from pm__issue_origin_channel.label. Used as a fallback when the admin has no translation for the code.
exist"false"Required{
"id": "example_id",
"internalId": 0,
"externalId": "example_externalId",
"issueKey": "example_issueKey",
"subject": "example_subject",
"description": "example_description",
"priority": 0,
"priorityLabel": "example_priorityLabel",
"projectKey": "example_projectKey",
"projectName": "example_projectName",
"type": {
"id": 0,
"code": "example_code"
},
"status": {
"id": 0,
"label": "example_label",
"categoryId": 0,
"categoryCode": "example_categoryCode"
},
"humanOnly": false,
"attachments": [
{
"blobToken": "example_blobToken",
"filename": "example_filename",
"contentType": "example_contentType",
"size": 0,
"downloadUrl": "example_downloadUrl",
"position": 0
}
],
"sourceEmails": [
{
"externalId": "example_externalId",
"subject": "example_subject",
"fromAddress": "example_fromAddress"
}
]
}GET /bff/issue/detail
curl -X GET "https://api.bizkithub.com/bff/issue/detail?issueKey=PROJ-123" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_KEY"All BizKitHub public API endpoints require authentication via API key.