Resource link
A resource link is a thread's reference to something that lives outside Solvio — an asset in an inventory system, an invoice, a directory entry. It is a pointer, not a copy: Solvio stores what to show and where to go, and never fetches the thing itself.
Links are flat and per-thread. The same external thing referenced from two threads is two independent rows, the way an attachment behaves; there is no shared registry row and no uniqueness constraint, so a thread may reference the same thing more than once.
A link carries a displayName and usually a deepLink — an http/https URL opened in a new tab, which requires the viewer's own login in the foreign system. It may additionally carry the identifying triple source + resourceType + externalId, which names the thing in its own system and makes the reverse lookup ("which threads reference this?") possible. The triple is set as a whole or not at all: a caller that cannot supply all three reliably supplies none, because a half-filled identity is findable by nobody.
A link is visible to everyone who can read its thread, not scoped to the external resource's own permissions. Keep displayName to low-entropy context; it does not belong to sensitive figures or state.
Reading them is part of reading the thread — select resourceLinks on a thread or a ticket's thread, there is no separate list endpoint.
Adds links to the thread in the path. Each entry needs a displayName and then either a deepLink or the complete source + resourceType + externalId triple — an entry with neither points at nothing and is answered with 400, as is a partial triple.
deepLink must be an absolute http or https URL. Other schemes are rejected: the value is rendered as a plain link, so anything else would run in the viewer's browser.
Duplicates are allowed — the same thing may be linked to a thread more than once. Requires WriteAction on the thread, the same right that attaching a file needs.
Token issued by the central equipme authentication, sent as Bearer <token>.
Thread id
8801Created
Bad Request
Unauthorized
Forbidden
Not Found
Internal Server Error
POST /api/v1/threads/{threadId}/resource-links HTTP/1.1
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 2
{}{
"data": [
{
"createdAt": "text",
"creator": {
"assignmentContext": "text",
"autoAssign": true,
"createdAt": "2026-01-01T00:00:00.000Z",
"description": "text",
"email": "ada.lovelace@example.com",
"firstName": "Ada",
"id": 17,
"kind": "",
"lastName": "Lovelace",
"mobile": "text",
"phone": "text",
"tenant": {
"id": 1,
"name": "text"
},
"tenantId": 1,
"title": "text",
"updatedAt": "2026-01-01T00:00:00.000Z"
},
"creatorId": 1,
"deepLink": "text",
"displayName": "text",
"externalId": "text",
"id": 1,
"provider": {
"id": 1,
"key": "text"
},
"providerId": 1,
"resourceType": "text",
"source": "text",
"threadId": 1
}
]
}Removes the given links from the thread in the path. Answers with 204 and no body.
All ids must belong to this thread; if any does not, nothing is removed and the answer is 404. Requires WriteAction on the thread.
Token issued by the central equipme authentication, sent as Bearer <token>.
Thread id
8801No Content
No content
Bad Request
Unauthorized
Forbidden
Not Found
Internal Server Error
DELETE /api/v1/threads/{threadId}/resource-links HTTP/1.1
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 2
{}No content
Changes a link's descriptive fields. Only displayName and deepLink can be patched; source, resourceType and externalId are immutable, so a value an external caller already looked up by cannot silently go stale — fix a wrong one by unlinking and relinking.
The invariants are re-checked against the result, not the request: clearing the deepLink of a link that carries no identifying triple is answered with 400, as is an empty displayName. A link that belongs to another thread is answered with 404. Requires WriteAction on the thread.
Token issued by the central equipme authentication, sent as Bearer <token>.
Thread id
8801Resource link id
4410OK
Bad Request
Unauthorized
Forbidden
Not Found
Internal Server Error
PATCH /api/v1/threads/{threadId}/resource-links/{linkId} HTTP/1.1
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 2
{}{
"data": {
"createdAt": "text",
"creator": {
"assignmentContext": "text",
"autoAssign": true,
"createdAt": "2026-01-01T00:00:00.000Z",
"description": "text",
"email": "ada.lovelace@example.com",
"firstName": "Ada",
"id": 17,
"kind": "",
"lastName": "Lovelace",
"mobile": "text",
"phone": "text",
"tenant": {
"id": 1,
"name": "text"
},
"tenantId": 1,
"title": "text",
"updatedAt": "2026-01-01T00:00:00.000Z"
},
"creatorId": 1,
"deepLink": "text",
"displayName": "text",
"externalId": "text",
"id": 1,
"provider": {
"id": 1,
"key": "text"
},
"providerId": 1,
"resourceType": "text",
"source": "text",
"threadId": 1
}
}Last updated
Was this helpful?