{
  "connector": "jira-confluence",
  "label": "Jira and Confluence",
  "vendor_docs": "https://developer.atlassian.com/cloud/jira/platform/rest/v3/",
  "summary": "One Atlassian Cloud site that answers Jira, Jira Software, Jira Service Management and Confluence REST, plus Atlassian's MCP tools.",
  "surfaces": [
    {
      "kind": "REST",
      "path": "/rest/api/3",
      "notes": "Jira platform REST, also `/rest/api/2` and `/rest/api/latest`"
    },
    {
      "kind": "REST",
      "path": "/rest/agile/1.0",
      "notes": "Jira Software boards, sprints and backlogs"
    },
    {
      "kind": "REST",
      "path": "/rest/servicedeskapi",
      "notes": "Jira Service Management"
    },
    {
      "kind": "REST",
      "path": "/wiki/rest/api",
      "notes": "Confluence v1, and Confluence v2 under `/wiki/api/v2`"
    },
    {
      "kind": "MCP",
      "path": "/mcp",
      "notes": "Atlassian MCP tools for Jira and Confluence"
    }
  ],
  "api_versions": [
    "Jira REST v3, v2, latest",
    "Jira Software agile 1.0",
    "Confluence REST v1 and v2"
  ],
  "supported": [
    {
      "item": "Each product's pagination style, including `nextPageToken` on `/search/jql` and cursor-only Confluence v2"
    },
    {
      "item": "Each product's error envelope, with 400 for malformed JQL/CQL, 404 for unknown ids and 409 for a stale Confluence page version"
    },
    {
      "item": "A JQL and CQL subset, including the history predicates `CHANGED` and `WAS`"
    },
    {
      "item": "The 19 built-in custom-field types the administration API accepts"
    },
    {
      "item": "OAuth scopes, product access, permission schemes, issue security levels and Confluence page restrictions decide whether a call is allowed"
    },
    {
      "item": "Blog posts, page and blueprint templates, and content properties"
    }
  ],
  "unsupported": [
    {
      "item": "JQL sub-queries (answered 400 with the vendor envelope)"
    },
    {
      "item": "Sending notifications; notification schemes are served but nothing is sent"
    },
    {
      "item": "Cascading selects and app-provided custom-field types"
    },
    {
      "item": "Confluence custom content beyond an empty collection, and space permissions"
    },
    {
      "item": "Rovo search (`searchAtlassian`/`fetchAtlassian`), Teamwork Graph, Compass, Bitbucket and Jira Service Management MCP tools"
    }
  ],
  "differences": [
    {
      "scenario": "Text search (`~`, CQL `text`)",
      "difference": "Whole-word matching with simple plural and `-ing` folding, phrases and wildcards; no relevance ranking, synonyms or language analysis. `/search/approximate-count` returns the exact count.",
      "guidance": "Assert that an issue or page is found, not on its order or on fuzzy matches."
    },
    {
      "scenario": "Authentication",
      "difference": "Open mode accepts any credential; strict mode only checks the token came from the bundled IdP. Authorization is still evaluated.",
      "guidance": "Test what a credential may do, not whether a bad credential is rejected by Atlassian identity."
    },
    {
      "scenario": "User identifiers",
      "difference": "Users carry the Cloud `accountId` and also the Server/Data Center `name` and `key`, accepted wherever a user is named.",
      "guidance": "Do not assert that `name` or `key` are absent; use `accountId` for Cloud behaviour."
    },
    {
      "scenario": "Dates",
      "difference": "Generated activity is shifted forward so relative-date queries match.",
      "guidance": "Assert with relative JQL (`created >= -7d`), not on absolute dates."
    },
    {
      "scenario": "Rate limits",
      "difference": "Nothing throttles until a fault is injected.",
      "guidance": "Inject `throttle` or `fail_next` to test backoff."
    },
    {
      "scenario": "Page size",
      "difference": "`maxResults` clamps to 100 on Jira and `limit` to 200 on Confluence v1, as Atlassian does, rather than answering 400.",
      "guidance": "Follow pagination; do not assume a large page size is honoured."
    }
  ],
  "faults_supported": [
    {
      "fault": "throttle",
      "behaviour": "429 with `Retry-After`, `X-RateLimit-*` headers and `RateLimit-Reason` `jira-burst-based`, in the Jira or Confluence envelope"
    },
    {
      "fault": "fail_next",
      "behaviour": "The next N calls fail as `throttle` does, then clear"
    },
    {
      "fault": "quota_limit",
      "behaviour": "429 with `RateLimit-Reason` `jira-quota-global-based`"
    },
    {
      "fault": "error_rate",
      "behaviour": "500 in the product's error envelope for the given fraction of calls"
    },
    {
      "fault": "latency_ms",
      "behaviour": "Fixed added latency on every data-plane request"
    }
  ]
}
