GoLinks API - Manage your Go Links, tags, and permissions programmatically.
To authenticate requests, include an Authorization header with the value "Bearer {YOUR_SANCTUM_TOKEN}".
All authenticated endpoints are marked with a requires authentication badge in the documentation below.
You can retrieve your API token by click the user profile dropdown in the upper right-hand corner, selecting API Access, and generating a new personal access token.
APIs for managing Go Links
Retrieve all links accessible to the authenticated user. This includes links owned by the user and links shared with them.
Page number for pagination.
Number of results per page (max 100).
Filter to only show owned links.
Filter to only show shared links.
Filter by enabled status.
Filter by tag label.
Search in link strings and target URLs.
Sort field (string, target_url, created_at, hit_count). Default: created_at.
Sort order (asc, desc). Default: desc.
curl --request GET \
--get "http://localhost/api/v2/links?page=1&per_page=15&filter%5Bowned%5D=1&filter%5Bshared%5D=&filter%5Benabled%5D=1&filter%5Btag%5D=important&filter%5Bsearch%5D=example&sort=hit_count&order=desc" \
--header "Authorization: Bearer {YOUR_SANCTUM_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"per_page\": 1,
\"filter\": {
\"owned\": true,
\"shared\": false,
\"enabled\": false,
\"tag\": \"architecto\",
\"search\": \"architecto\"
}
}"
{
"data": [
{
"id": 1,
"string": "example",
"target_url": "https://example.com",
"enabled": true,
"hit_count": 42,
"http_status_code": 200,
"last_status_check_at": "2025-11-21 10:30:00",
"exclude_from_status_check": false,
"created_at": "2025-11-01T12:00:00.000000Z",
"updated_at": "2025-11-21T10:30:00.000000Z",
"owner": {
"id": 1,
"name": "John Doe",
"unity_id": "jdoe"
},
"tags": [
{
"id": 1,
"label": "important",
"name": "important"
}
],
"is_owner": true,
"is_shared": false
}
],
"meta": {
"current_page": 1,
"per_page": 15,
"total": 42,
"last_page": 3
}
}
Create a new Go Link. If no custom string is provided, a random 7-character string will be generated. Users need the appropriate permissions to create random or custom links.
curl --request POST \
"http://localhost/api/v2/links" \
--header "Authorization: Bearer {YOUR_SANCTUM_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"string\": \"my-link\",
\"target_url\": \"https:\\/\\/example.com\",
\"enabled\": true,
\"exclude_from_status_check\": false,
\"tag_id\": 1,
\"share_with\": \"jdoe\"
}"
{
"id": 1,
"string": "my-link",
"target_url": "https://example.com",
"enabled": true,
"hit_count": 0,
"http_status_code": null,
"last_status_check_at": null,
"exclude_from_status_check": false,
"created_at": "2025-11-21T12:00:00.000000Z",
"updated_at": "2025-11-21T12:00:00.000000Z",
"owner": {
"id": 1,
"name": "John Doe",
"unity_id": "jdoe"
},
"tags": [
{
"id": 1,
"label": "important",
"name": "important"
}
]
}
Update the target URL for multiple links in a single request. Each link is independently authorized — you must have manage permissions for each link. Links you cannot manage or that do not exist will be returned in the errors array.
curl --request PATCH \
"http://localhost/api/v2/links/bulk-update" \
--header "Authorization: Bearer {YOUR_SANCTUM_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"links\": [
{
\"string\": \"my-link\",
\"target_url\": \"https:\\/\\/example.com\\/new\"
}
]
}"
{
"updated": [
{
"string": "my-link",
"target_url": "https://example.com/new"
}
],
"errors": [
{
"string": "bad-link",
"error": "Link not found"
},
{
"string": "other-link",
"error": "Unauthorized"
}
]
}
Retrieve a specific link by its string identifier.
The link string.
curl --request GET \
--get "http://localhost/api/v2/links/my-link" \
--header "Authorization: Bearer {YOUR_SANCTUM_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"id": 1,
"string": "my-link",
"target_url": "https://example.com",
"enabled": true,
"hit_count": 42,
"http_status_code": 200,
"last_status_check_at": "2025-11-21 10:30:00",
"exclude_from_status_check": false,
"created_at": "2025-11-01T12:00:00.000000Z",
"updated_at": "2025-11-21T10:30:00.000000Z",
"owner": {
"id": 1,
"name": "John Doe",
"unity_id": "jdoe"
},
"tags": [
{
"id": 1,
"label": "important",
"name": "important"
}
],
"rules": [
{
"id": 1,
"value": "admins@ncsu.edu",
"created_at": "2025-11-01T12:00:00.000000Z",
"updated_at": "2025-11-01T12:00:00.000000Z"
},
{
"id": 2,
"value": "jsmith@ncsu.edu",
"created_at": "2025-11-02T14:30:00.000000Z",
"updated_at": "2025-11-02T14:30:00.000000Z"
}
]
}
Update an existing link. You must be the owner or have manage permissions.
The link string.
curl --request PATCH \
"http://localhost/api/v2/links/my-link" \
--header "Authorization: Bearer {YOUR_SANCTUM_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"target_url\": \"https:\\/\\/newexample.com\",
\"enabled\": false,
\"exclude_from_status_check\": true
}"
{
"id": 1,
"string": "my-link",
"target_url": "https://newexample.com",
"enabled": false,
"hit_count": 42,
"http_status_code": 200,
"last_status_check_at": "2025-11-21 10:30:00",
"exclude_from_status_check": true,
"created_at": "2025-11-01T12:00:00.000000Z",
"updated_at": "2025-11-21T12:30:00.000000Z",
"owner": {
"id": 1,
"name": "John Doe",
"unity_id": "jdoe"
},
"tags": []
}
Delete a link. You must be the owner of the link to delete it.
The link string.
curl --request DELETE \
"http://localhost/api/v2/links/my-link" \
--header "Authorization: Bearer {YOUR_SANCTUM_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"message": "Link deleted successfully."
}
Transfer ownership of a link to another user. You must be the owner of the link.
The link string.
curl --request POST \
"http://localhost/api/v2/links/my-link/transfer" \
--header "Authorization: Bearer {YOUR_SANCTUM_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"new_owner_unity_id\": \"jsmith\"
}"
{
"message": "Link transferred successfully.",
"link": {
"id": 1,
"string": "my-link",
"target_url": "https://example.com",
"owner": {
"id": 2,
"name": "Jane Smith",
"unity_id": "jsmith"
}
}
}
Attach a tag to a link. You must have manage permissions for both the link and the tag.
The link string.
curl --request POST \
"http://localhost/api/v2/links/my-link/tags" \
--header "Authorization: Bearer {YOUR_SANCTUM_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"tag_id\": 1
}"
Remove a tag from a link. You must have manage permissions for the link.
The link string.
The tag ID to detach.
curl --request DELETE \
"http://localhost/api/v2/links/my-link/tags/1" \
--header "Authorization: Bearer {YOUR_SANCTUM_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" APIs for managing tags
Retrieve all tags owned by the authenticated user.
Page number for pagination.
Number of results per page (max 100).
Search in tag labels.
Sort field (label, created_at, updated_at). Default: label.
Sort order (asc, desc). Default: asc.
Include link counts and hit totals for each tag. Default: false.
curl --request GET \
--get "http://localhost/api/v2/tags?page=1&per_page=15&filter%5Bsearch%5D=project&sort=label&order=asc&include_counts=1" \
--header "Authorization: Bearer {YOUR_SANCTUM_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"per_page\": 1,
\"filter\": {
\"search\": \"architecto\"
},
\"include_counts\": true
}"
Create a new tag for organizing your links.
curl --request POST \
"http://localhost/api/v2/tags" \
--header "Authorization: Bearer {YOUR_SANCTUM_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"label\": \"My Project\"
}"
Retrieve a specific tag by ID.
The ID of the tag.
The tag ID.
Include all links with this tag. Default: false.
curl --request GET \
--get "http://localhost/api/v2/tags/architecto?include_links=1" \
--header "Authorization: Bearer {YOUR_SANCTUM_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" Update a tag's label. You must be the owner of the tag.
The ID of the tag.
The tag ID.
curl --request PATCH \
"http://localhost/api/v2/tags/architecto" \
--header "Authorization: Bearer {YOUR_SANCTUM_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"label\": \"Updated Project\"
}"
Delete a tag. This will automatically detach the tag from all associated links. You must be the owner of the tag.
The ID of the tag.
The tag ID.
curl --request DELETE \
"http://localhost/api/v2/tags/architecto" \
--header "Authorization: Bearer {YOUR_SANCTUM_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"