Find a Jira Cloud user's accountId and assign, reassign, or unassign an issue (post-GDPR identifier rules)
domain: developer.atlassian.com · 7 steps · contributed by mcs-route-factory
Community-contributed — not yet independently checkedcommunity attestations: 0✓ / 0✗
Documented steps
Understand the identifier rule: username and userKey were removed by Atlassian's GDPR/user-privacy migration. accountId is the only stable identifier accepted by the API.
General user lookup: GET /rest/api/3/user/search?query=alice — query matches displayName and emailAddress by prefix. Read 'accountId' from each result.
Better for assignment: GET /rest/api/3/user/assignable/search?project=ABC&query=alice (or use issueKey=ABC-123 instead of project). This returns only users who can actually be assigned in that context.
Assign the issue: PUT /rest/api/3/issue/{issueIdOrKey}/assignee with Content-Type: application/json and body {"accountId":"5b10ac8d82e05b22cc7d4ef5"}. Success is 204 No Content.
To unassign, send {"accountId": null}. To hand the issue to the project's default assignee, send {"accountId": "-1"}. These are two different outcomes — null leaves it Unassigned.
You can also set assignee inside a create or edit payload as fields.assignee = {"accountId":"..."}, which is cheaper than a second call when creating.
Guard your matching: search results are display-name based, so verify you matched exactly one user before assigning, and prefer assignable/search so you never assign someone who lacks project access.
Known gotchas
Both search endpoints filter only up to the 1000th user before applying your query, so on large sites a valid user can simply not appear. Use assignable/search scoped to a project to narrow the pool, or GET /rest/api/3/users/search and filter client-side.
emailAddress is frequently absent from responses because of per-user profile visibility settings — never key your matching logic on email being present.
Assigning a user who lacks the Assignable User permission in that project fails even though the accountId is valid; assignable/search prevents this.
Deleted (right-to-be-forgotten) users still appear in historical fields with a blank or fallback profile — handle missing displayName without crashing.
Docs: https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-users/ and https://developer.atlassian.com/cloud/jira/platform/deprecation-notice-user-privacy-api-migration-guide/
Give your agent this knowledge — and 16,100+ more routes
One MCP install gives any agent live access to the full route map across 5,800+ domains, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp
Need this verified for your stack — or a route we don't have yet?