Get a release link
Release links attach external URLs to a release. Read a single release link by id.
Reading a link needs view access to its release. If you can't view the release, the request returns 404, not 403, so the response doesn't reveal whether the release or the link exists. A link id that belongs to a different release also returns 404.
This route serves workspace releases only. For a release that belongs to a project, it returns 404. Use Get a project release link instead.
Path Parameters
slug:requiredstringThe workspace slug. It appears in your Plane URLs. In https://app.plane.so/my-team/projects/, the slug is my-team.
release_id:requiredstring (uuid)The release the resource belongs to.
pk:requiredstring (uuid)The release link id.
Response shaping
fields:optionalstringComma-separated list of fields to return. Unrequested keys are omitted, not returned as null. id always comes back. Pass all for every requestable field. An unknown name is a 400. See Sparse fields.
Requestable here: created_at, created_by_id, id, metadata, release_id, title, updated_at, updated_by_id, url.
Scopes
releases.links:read
Errors
| Status | Code | Cause |
|---|---|---|
401 | unauthorized | Missing or invalid credentials. |
402 | payment_required | The feature this endpoint belongs to isn't enabled on your plan or is switched off. |
403 | forbidden | Your token scope doesn't allow this. |
404 | not_found | No such link on this release, no such workspace release, or you can't view the release. |
406 | not_acceptable | The Accept header asks for a representation the API can't produce. |
429 | rate_limited | Throttled. Honor the Retry-After header before retrying. |
curl -X GET \
"https://api.plane.so/api/v2/workspaces/my-team/releases/9c1f0b3d-6d2e-4c9a-8b41-2f7e5a0d6c88/links/8f4c2b1e-0d3a-4f7b-9c21-6e5a8b7d4f13/" \
-H "X-Api-Key: $PLANE_API_KEY"import requests
response = requests.get(
"https://api.plane.so/api/v2/workspaces/my-team/releases/9c1f0b3d-6d2e-4c9a-8b41-2f7e5a0d6c88/links/8f4c2b1e-0d3a-4f7b-9c21-6e5a8b7d4f13/",
headers={"X-Api-Key": "your-api-key"},
)
print(response.json())const response = await fetch(
"https://api.plane.so/api/v2/workspaces/my-team/releases/9c1f0b3d-6d2e-4c9a-8b41-2f7e5a0d6c88/links/8f4c2b1e-0d3a-4f7b-9c21-6e5a8b7d4f13/",
{
method: "GET",
headers: {
"X-Api-Key": "your-api-key",
},
},
);
const data = await response.json();{
"created_at": "2026-01-14T09:22:41.478363Z",
"updated_at": "2026-01-14T09:22:41.478363Z",
"created_by_id": "16c61a3a-512a-48ac-b0be-b6b46fe6f430",
"updated_by_id": null,
"id": "b7e42a19-3c5d-4f80-9a26-8d1c0f4e7b53",
"metadata": null,
"release_id": "f960d3c2-8524-4a41-b8eb-055ce4be2a7f",
"title": "Example title",
"url": "https://example.com/spec"
}{
"type": "not_found",
"code": "not_found",
"detail": "No release link matches the given query."
}
