Skip to content

Depot chat

Registers the technician’s own routes: the socket, the availability toggle, and the queue.

This page is generated from the Depot route table. Every operation carries the permission it needs and the anchor an agent can link to.

POSTshared facehosteditmspremoteIdempotent

From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.

Source: [object Object]

setAvailable is the explicit toggle.

It is REST rather than a socket frame because it is a decision: a technician who says they are taking chats and then loses their connection has still said it, and the answer has to be a status code they can see.

Required, sent as application/json.

FieldTypeDescription
availablerequiredboolean
StatusBodyDescription
200application/json, objectSuccess.
400application/problem+json, ProblemDetailsThe request body is not valid JSON.
401application/problem+json, ProblemDetailsAuthentication is required.
409application/problem+json, ProblemDetailsOpen the chat console before marking yourself available.
503application/problem+json, ProblemDetailsLive chat is not available on this server.
Terminal window
# Sign in first. outpost_console is a session cookie, so send it with every request.
# This operation is idempotent. Repeating it does not repeat its effect.
curl -X POST 'https://depot.example.com/api/v1/chat/available' \
-H 'X-CSRF-Token: <csrf-token>' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-b 'outpost_console=<console-session>' \
--data '{
"available": false
}'

GETshared facehosteditmspremoteIdempotent

From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.

Source: [object Object]

Presence

StatusBodyDescription
200application/json, ChatPresenceResponseSuccess.
401application/problem+json, ProblemDetailsAuthentication is required.
503application/problem+json, ProblemDetailsLive chat is not available on this server.

200 response body

FieldTypeDescription
availablerequiredboolean
awayrequiredboolean
awayMinutesrequiredinteger
connectedrequiredboolean
displayNamestring
heldrequiredarray of Card
held[].agentIdstring
held[].assignedTostring
held[].clientNamestring
held[].clientPublicIdrequiredstring
held[].hostnamestring
held[].ratinginteger
held[].requestedAtrequiredstring (date-time)
held[].requesterIdstring
held[].requesterNamestring
held[].sessionIdrequiredstring
held[].siteIdstring
held[].statusrequiredstring
held[].ticketIdstring
held[].waitingSecondsrequiredinteger
holdingrequiredinteger
maxConcurrentrequiredinteger
offersrequiredarray of Card
offers[].agentIdstring
offers[].assignedTostring
offers[].clientNamestring
offers[].clientPublicIdrequiredstring
offers[].hostnamestring
offers[].ratinginteger
offers[].requestedAtrequiredstring (date-time)
offers[].requesterIdstring
offers[].requesterNamestring
offers[].sessionIdrequiredstring
offers[].siteIdstring
offers[].statusrequiredstring
offers[].ticketIdstring
offers[].waitingSecondsrequiredinteger
poolrequiredstring
queueSecondsrequiredinteger
userPublicIdrequiredstring
Terminal window
# Sign in first. outpost_console is a session cookie, so send it with every request.
# This operation is idempotent. Repeating it does not repeat its effect.
curl -X GET 'https://depot.example.com/api/v1/chat/presence' \
-H 'X-CSRF-Token: <csrf-token>' \
-H 'Accept: application/json' \
-b 'outpost_console=<console-session>'

GETshared facehosteditmspremoteIdempotent

From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.

Source: [object Object]

queue is the waiting list.

With a tenant on the request it is that client’s queue, which is every mode but msp. Without one it is the msp fan-out: one request, one sort, and one honest statement about which client databases could not be read.

StatusBodyDescription
200application/json, ChatQueueResponseSuccess.
400application/problem+json, ProblemDetailsOne or more validation errors occurred.
403application/problem+json, ProblemDetailsAnother technician is on this chat.
404application/problem+json, ProblemDetailsNo chat matches that id.
409application/problem+json, ProblemDetailsAnother technician is already on this chat.
500application/problem+json, ProblemDetailsCould not list clients.
503application/problem+json, ProblemDetailsLive chat is not available on this server.

200 response body

FieldTypeDescription
itemsrequiredarray of ChatSessionView
items[].acceptedAtstring (date-time) or null
items[].agentIdstring
items[].assignedUserIdstring
items[].clientNamestring
items[].clientPublicIdrequiredstring
items[].endedAtstring (date-time) or null
items[].endedBystring
items[].hostnamestring
items[].publicIdrequiredstring
items[].ratingrequiredinteger
items[].requestedAtrequiredstring (date-time)
items[].requesterIdstring
items[].requesterNamestring
items[].siteIdstring
items[].statusrequiredstring
items[].ticketIdstring
items[].waitingSecondsrequiredinteger
techniciansOnlinerequiredinteger
unavailableClientsrequiredarray of string
Terminal window
# Sign in first. outpost_console is a session cookie, so send it with every request.
# This operation is idempotent. Repeating it does not repeat its effect.
curl -X GET 'https://depot.example.com/api/v1/chat/queue' \
-H 'X-CSRF-Token: <csrf-token>' \
-H 'Accept: application/json' \
-b 'outpost_console=<console-session>'

GETtenant facehosteditmspremoteIdempotent

From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.

Source: [object Object]

List sessions

NameInTypeRequiredDescription
agentIdquerystringNo
assignedToquerystringNo
dirquerystring, one of asc, descNoSort direction.
pagequeryintegerNoOne-based page number. Defaults to 1.
pageSizequeryintegerNoRows per page, 1 to 200. Defaults to 50.
promotedquerystringNo
qquerystringNoFree-text search term.
ratingquerystringNo
requesterIdquerystringNo
siteIdquerystringNo
sortquerystring, one of ended, requestedNoSort key.
statusquerystring, one of active, ended, missed, waitingNoComma-separated set. An unrecognised value is refused.
ticketIdquerystringNo
unassignedquerystringNo
StatusBodyDescription
200application/json, PagedResultChatSessionViewSuccess.
400application/problem+json, ProblemDetailsOne or more validation errors occurred.
403application/problem+json, ProblemDetailsAnother technician is on this chat.
404application/problem+json, ProblemDetailsNo chat matches that id.
409application/problem+json, ProblemDetailsAnother technician is already on this chat.
500application/problem+json, ProblemDetailsNo client context in request.
503application/problem+json, ProblemDetailsLive chat is not available on this server.

200 response body

FieldTypeDescription
itemsrequiredarray of ChatSessionView
items[].acceptedAtstring (date-time) or null
items[].agentIdstring
items[].assignedUserIdstring
items[].clientNamestring
items[].clientPublicIdrequiredstring
items[].endedAtstring (date-time) or null
items[].endedBystring
items[].hostnamestring
items[].publicIdrequiredstring
items[].ratingrequiredinteger
items[].requestedAtrequiredstring (date-time)
items[].requesterIdstring
items[].requesterNamestring
items[].siteIdstring
items[].statusrequiredstring
items[].ticketIdstring
items[].waitingSecondsrequiredinteger
pagerequiredinteger
pageSizerequiredinteger
totalrequiredinteger
Terminal window
# Sign in first. outpost_console is a session cookie, so send it with every request.
# This operation is idempotent. Repeating it does not repeat its effect.
curl -X GET 'https://depot.example.com/api/v1/chat/sessions?agentId=<agentId>&assignedTo=<assignedTo>&dir=asc&page=0&pageSize=0&promoted=<promoted>' \
-H 'X-CSRF-Token: <csrf-token>' \
-H 'Accept: application/json' \
-b 'outpost_console=<console-session>'

GETtenant facehosteditmspremoteIdempotent

From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.

Source: [object Object]

Get session

NameInTypeRequiredDescription
sessionIDpathstringYesA uuid.
StatusBodyDescription
200application/json, ChatSessionViewSuccess.
400application/problem+json, ProblemDetailsOne or more validation errors occurred.
403application/problem+json, ProblemDetailsAnother technician is on this chat.
404application/problem+json, ProblemDetailsNo resource matches that id.
409application/problem+json, ProblemDetailsAnother technician is already on this chat.
500application/problem+json, ProblemDetailsNo client context in request.
503application/problem+json, ProblemDetailsLive chat is not available on this server.

200 response body

FieldTypeDescription
acceptedAtstring (date-time) or null
agentIdstring
assignedUserIdstring
clientNamestring
clientPublicIdrequiredstring
endedAtstring (date-time) or null
endedBystring
hostnamestring
publicIdrequiredstring
ratingrequiredinteger
requestedAtrequiredstring (date-time)
requesterIdstring
requesterNamestring
siteIdstring
statusrequiredstring
ticketIdstring
waitingSecondsrequiredinteger
Terminal window
# Sign in first. outpost_console is a session cookie, so send it with every request.
# This operation is idempotent. Repeating it does not repeat its effect.
curl -X GET 'https://depot.example.com/api/v1/chat/sessions/<sessionID>' \
-H 'X-CSRF-Token: <csrf-token>' \
-H 'Accept: application/json' \
-b 'outpost_console=<console-session>'

POST /api/v1/chat/sessions/{sessionID}/accept

Section titled “POST /api/v1/chat/sessions/{sessionID}/accept”

POSTtenant facehosteditmspremoteIdempotent

From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.

Source: [object Object]

Accept

NameInTypeRequiredDescription
sessionIDpathstringYesA uuid.
StatusBodyDescription
200application/json, ChatSessionViewSuccess.
400application/problem+json, ProblemDetailsOne or more validation errors occurred.
401application/problem+json, ProblemDetailsAuthentication is required.
403application/problem+json, ProblemDetailsAnother technician is on this chat.
404application/problem+json, ProblemDetailsNo resource matches that id.
409application/problem+json, ProblemDetailsAnother technician is already on this chat.
500application/problem+json, ProblemDetailsNo client context in request.
503application/problem+json, ProblemDetailsLive chat is not available on this server.

200 response body

FieldTypeDescription
acceptedAtstring (date-time) or null
agentIdstring
assignedUserIdstring
clientNamestring
clientPublicIdrequiredstring
endedAtstring (date-time) or null
endedBystring
hostnamestring
publicIdrequiredstring
ratingrequiredinteger
requestedAtrequiredstring (date-time)
requesterIdstring
requesterNamestring
siteIdstring
statusrequiredstring
ticketIdstring
waitingSecondsrequiredinteger
Terminal window
# Sign in first. outpost_console is a session cookie, so send it with every request.
# This operation is idempotent. Repeating it does not repeat its effect.
curl -X POST 'https://depot.example.com/api/v1/chat/sessions/<sessionID>/accept' \
-H 'X-CSRF-Token: <csrf-token>' \
-H 'Accept: application/json' \
-b 'outpost_console=<console-session>'

POST /api/v1/chat/sessions/{sessionID}/decline

Section titled “POST /api/v1/chat/sessions/{sessionID}/decline”

POSTtenant facehosteditmspremoteIdempotent

From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.

Source: [object Object]

Decline

NameInTypeRequiredDescription
sessionIDpathstringYesA uuid.
StatusBodyDescription
204NoneSuccess, with no body.
400application/problem+json, ProblemDetailsOne or more validation errors occurred.
401application/problem+json, ProblemDetailsAuthentication is required.
403application/problem+json, ProblemDetailsAnother technician is on this chat.
404application/problem+json, ProblemDetailsNo resource matches that id.
409application/problem+json, ProblemDetailsAnother technician is already on this chat.
500application/problem+json, ProblemDetailsNo client context in request.
503application/problem+json, ProblemDetailsLive chat is not available on this server.
Terminal window
# Sign in first. outpost_console is a session cookie, so send it with every request.
# This operation is idempotent. Repeating it does not repeat its effect.
curl -X POST 'https://depot.example.com/api/v1/chat/sessions/<sessionID>/decline' \
-H 'X-CSRF-Token: <csrf-token>' \
-H 'Accept: application/json' \
-b 'outpost_console=<console-session>'

POST /api/v1/chat/sessions/{sessionID}/end

Section titled “POST /api/v1/chat/sessions/{sessionID}/end”

POSTtenant facehosteditmspremoteIdempotent

From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.

Source: [object Object]

End

NameInTypeRequiredDescription
sessionIDpathstringYesA uuid.

Required, sent as application/json.

FieldTypeDescription
endedByrequiredstring
StatusBodyDescription
200application/json, ChatSessionViewSuccess.
400application/problem+json, ProblemDetailsThe request body is not valid JSON.
401application/problem+json, ProblemDetailsAuthentication is required.
403application/problem+json, ProblemDetailsAnother technician is on this chat.
404application/problem+json, ProblemDetailsNo resource matches that id.
409application/problem+json, ProblemDetailsAnother technician is already on this chat.
500application/problem+json, ProblemDetailsNo client context in request.
503application/problem+json, ProblemDetailsLive chat is not available on this server.

200 response body

FieldTypeDescription
acceptedAtstring (date-time) or null
agentIdstring
assignedUserIdstring
clientNamestring
clientPublicIdrequiredstring
endedAtstring (date-time) or null
endedBystring
hostnamestring
publicIdrequiredstring
ratingrequiredinteger
requestedAtrequiredstring (date-time)
requesterIdstring
requesterNamestring
siteIdstring
statusrequiredstring
ticketIdstring
waitingSecondsrequiredinteger
Terminal window
# Sign in first. outpost_console is a session cookie, so send it with every request.
# This operation is idempotent. Repeating it does not repeat its effect.
curl -X POST 'https://depot.example.com/api/v1/chat/sessions/<sessionID>/end' \
-H 'X-CSRF-Token: <csrf-token>' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-b 'outpost_console=<console-session>' \
--data '{
"endedBy": "string"
}'

GET /api/v1/chat/sessions/{sessionID}/messages

Section titled “GET /api/v1/chat/sessions/{sessionID}/messages”

GETtenant facehosteditmspremoteIdempotent

From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.

Source: [object Object]

transcript is the read this feature is most careful about.

chat:read is the reviewer’s permission, and a technician does not hold it. But a technician may always re-read a conversation THEY personally handled: it is their own work, they were a party to it, and refusing would mean somebody could not check what they promised a customer an hour ago. That is the same shape Core’s messages route takes with requireAnyPermission.

Anything else - a technician reading a colleague’s chat - is refused, and a read by somebody who did not handle it is written to the audit chain even when it is allowed, because the reviewer’s read is the one nothing else records.

NameInTypeRequiredDescription
sessionIDpathstringYesA uuid.
sincequerystringNo
StatusBodyDescription
200application/json, array of ChatMessageViewSuccess.
400application/problem+json, ProblemDetailsOne or more validation errors occurred.
403application/problem+json, ProblemDetailsAnother technician is on this chat.
404application/problem+json, ProblemDetailsNo resource matches that id.
409application/problem+json, ProblemDetailsAnother technician is already on this chat.
500application/problem+json, ProblemDetailsNo client context in request.
503application/problem+json, ProblemDetailsLive chat is not available on this server.

200 response body

FieldTypeDescription
[].authorstring
[].authorIdstring
[].bodyrequiredstring
[].createdAtrequiredstring (date-time)
[].idrequiredinteger

int64.

[].publicIdrequiredstring
[].senderrequiredstring
Terminal window
# Sign in first. outpost_console is a session cookie, so send it with every request.
# This operation is idempotent. Repeating it does not repeat its effect.
curl -X GET 'https://depot.example.com/api/v1/chat/sessions/<sessionID>/messages?since=<since>' \
-H 'X-CSRF-Token: <csrf-token>' \
-H 'Accept: application/json' \
-b 'outpost_console=<console-session>'

POST /api/v1/chat/sessions/{sessionID}/messages

Section titled “POST /api/v1/chat/sessions/{sessionID}/messages”

POSTtenant facehosteditmspremote

From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.

Source: [object Object]

reply is the technician’s line.

Only the technician HOLDING the conversation may add one: a second technician typing into somebody else’s chat would appear to the customer as one person contradicting themselves.

NameInTypeRequiredDescription
sessionIDpathstringYesA uuid.

Required, sent as application/json.

FieldTypeDescription
bodyrequiredstring
StatusBodyDescription
201application/json, ChatMessageViewCreated.
400application/problem+json, ProblemDetailsThe request body is not valid JSON.
401application/problem+json, ProblemDetailsAuthentication is required.
403application/problem+json, ProblemDetailsAnother technician is on this chat.
404application/problem+json, ProblemDetailsNo resource matches that id.
409application/problem+json, ProblemDetailsAnother technician is already on this chat.
500application/problem+json, ProblemDetailsNo client context in request.
503application/problem+json, ProblemDetailsLive chat is not available on this server.

201 response body

FieldTypeDescription
authorstring
authorIdstring
bodyrequiredstring
createdAtrequiredstring (date-time)
idrequiredinteger

int64.

publicIdrequiredstring
senderrequiredstring
Terminal window
# Sign in first. outpost_console is a session cookie, so send it with every request.
curl -X POST 'https://depot.example.com/api/v1/chat/sessions/<sessionID>/messages' \
-H 'X-CSRF-Token: <csrf-token>' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-b 'outpost_console=<console-session>' \
--data '{
"body": "string"
}'

POST /api/v1/chat/sessions/{sessionID}/promote

Section titled “POST /api/v1/chat/sessions/{sessionID}/promote”

POSTtenant facehosteditmspremote

From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.

Source: [object Object]

promote raises a NEW ticket from the conversation, through the same path the missed-chat fallback uses.

A conversation that already has a ticket is refused: two tickets for one conversation is two queues for one problem.

NameInTypeRequiredDescription
sessionIDpathstringYesA uuid.
StatusBodyDescription
201application/json, objectCreated.
400application/problem+json, ProblemDetailsOne or more validation errors occurred.
403application/problem+json, ProblemDetailsAnother technician is on this chat.
404application/problem+json, ProblemDetailsNo resource matches that id.
409application/problem+json, ProblemDetailsAnother technician is already on this chat.
500application/problem+json, ProblemDetailsNo client context in request.
503application/problem+json, ProblemDetailsLive chat is not available on this server.
Terminal window
# Sign in first. outpost_console is a session cookie, so send it with every request.
curl -X POST 'https://depot.example.com/api/v1/chat/sessions/<sessionID>/promote' \
-H 'X-CSRF-Token: <csrf-token>' \
-H 'Accept: application/json' \
-b 'outpost_console=<console-session>'

POST /api/v1/chat/sessions/{sessionID}/rate

Section titled “POST /api/v1/chat/sessions/{sessionID}/rate”

POSTtenant facehosteditmspremoteIdempotent

From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.

Source: [object Object]

rate records the thumbs on a finished conversation.

It exists on this face so a rating given out of band - over the phone, or on a machine that went off before the tray could send it - can still be recorded. The store refuses a second rating and refuses one on a chat that has not ended, so neither of those is checked again here.

NameInTypeRequiredDescription
sessionIDpathstringYesA uuid.

Required, sent as application/json.

FieldTypeDescription
commentrequiredstring
ratingrequiredinteger
StatusBodyDescription
200application/json, ChatSessionViewSuccess.
400application/problem+json, ProblemDetailsThe request body is not valid JSON.
403application/problem+json, ProblemDetailsAnother technician is on this chat.
404application/problem+json, ProblemDetailsNo resource matches that id.
409application/problem+json, ProblemDetailsAnother technician is already on this chat.
500application/problem+json, ProblemDetailsNo client context in request.
503application/problem+json, ProblemDetailsLive chat is not available on this server.

200 response body

FieldTypeDescription
acceptedAtstring (date-time) or null
agentIdstring
assignedUserIdstring
clientNamestring
clientPublicIdrequiredstring
endedAtstring (date-time) or null
endedBystring
hostnamestring
publicIdrequiredstring
ratingrequiredinteger
requestedAtrequiredstring (date-time)
requesterIdstring
requesterNamestring
siteIdstring
statusrequiredstring
ticketIdstring
waitingSecondsrequiredinteger
Terminal window
# Sign in first. outpost_console is a session cookie, so send it with every request.
# This operation is idempotent. Repeating it does not repeat its effect.
curl -X POST 'https://depot.example.com/api/v1/chat/sessions/<sessionID>/rate' \
-H 'X-CSRF-Token: <csrf-token>' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-b 'outpost_console=<console-session>' \
--data '{
"comment": "string",
"rating": 0
}'

POST /api/v1/chat/sessions/{sessionID}/ticket

Section titled “POST /api/v1/chat/sessions/{sessionID}/ticket”

POSTtenant facehosteditmspremoteIdempotent

From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.

Source: [object Object]

linkTicket points a conversation at a ticket that already exists, for the common case of a chat about something already filed.

NameInTypeRequiredDescription
sessionIDpathstringYesA uuid.

Required, sent as application/json.

FieldTypeDescription
ticketIdrequiredstring
StatusBodyDescription
200application/json, ChatSessionViewSuccess.
400application/problem+json, ProblemDetailsThe request body is not valid JSON.
403application/problem+json, ProblemDetailsAnother technician is on this chat.
404application/problem+json, ProblemDetailsNo resource matches that id.
409application/problem+json, ProblemDetailsAnother technician is already on this chat.
500application/problem+json, ProblemDetailsNo client context in request.
503application/problem+json, ProblemDetailsLive chat is not available on this server.

200 response body

FieldTypeDescription
acceptedAtstring (date-time) or null
agentIdstring
assignedUserIdstring
clientNamestring
clientPublicIdrequiredstring
endedAtstring (date-time) or null
endedBystring
hostnamestring
publicIdrequiredstring
ratingrequiredinteger
requestedAtrequiredstring (date-time)
requesterIdstring
requesterNamestring
siteIdstring
statusrequiredstring
ticketIdstring
waitingSecondsrequiredinteger
Terminal window
# Sign in first. outpost_console is a session cookie, so send it with every request.
# This operation is idempotent. Repeating it does not repeat its effect.
curl -X POST 'https://depot.example.com/api/v1/chat/sessions/<sessionID>/ticket' \
-H 'X-CSRF-Token: <csrf-token>' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-b 'outpost_console=<console-session>' \
--data '{
"ticketId": "string"
}'

GETshared facehosteditmspremoteIdempotentWebSocket

From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.

Source: [object Object]

stream attaches one console window.

A technician may have several open at once - several monitors, sometimes several machines - and each gets its own Subscription. Every frame reaches all of them; an offer rings in exactly one and the rest are told where it went.

Every rejection happens BEFORE the upgrade, so a console that cannot connect gets a JSON problem document it can render rather than a socket that closes with no explanation - the same discipline liveMetrics keeps, and the reason the window cap is asked as a question here rather than enforced by evicting somebody’s oldest console.

StatusBodyDescription
101NoneSwitching protocols. The connection continues as a websocket; see x-outpost-transport.
401application/problem+json, ProblemDetailsAuthentication is required.
409application/problem+json, ProblemDetailsThe chat console is already open in as many windows as this desk allows. Close one and try again.
503application/problem+json, ProblemDetailsLive chat is not available on this server.
Terminal window
# Sign in first. outpost_console is a session cookie, so send it with every request.
# This endpoint upgrades to a WebSocket. The sample shows the handshake only.
# This operation is idempotent. Repeating it does not repeat its effect.
curl -X GET 'https://depot.example.com/api/v1/chat/stream' \
-H 'X-CSRF-Token: <csrf-token>' \
-H 'Accept: application/json' \
-b 'outpost_console=<console-session>'

Content is licensed CC BY 4.0. Code samples are MIT. Outpost and the Outpost mark are trademarks of Outpost Business Solutions, PBC and are not covered by either license.