A ticket for this organisation’s live socket
const url = 'https://api.sloose.com/orgs/org_9f3c/socket';const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://api.sloose.com/orgs/org_9f3c/socket \ --header 'Authorization: Bearer <token>'A one-use ticket, good for a minute, for a WebSocket to this organisation’s room — which tells every tab with the organisation in view when its billing, its credits or its entitlements change, so each reads them again as the change lands (GET …/live has the frames). A browser cannot put a header on a WebSocket upgrade and a session token in an address lands in every log on the way, so the socket is opened with this ticket instead: url is the address to open, ticket included. The ticket is bound to this session, and the room admits the socket only while the session is still in the organisation. A signed-in session only: an API token has no socket. A staff member’s view may listen, read-only or not: the socket reads nothing, and changes nothing.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”The organisation id the session was issued for. A token for one organisation can never read another.
Example
org_9f3cThe organisation id the session was issued for. A token for one organisation can never read another.
Responses
Section titled “Responses”A ticket, and the address to open with it.
object
The socket’s address, wss://…/live?ticket=….
When the ticket stops being accepted.
Examplegenerated
{ "ticket": "example", "url": "example", "expiresAt": "example"}No bearer, or one that no longer resolves: a session that is unknown or expired (code: AUTH_REQUIRED), or an API token that was revoked or expired (TOKEN_REVOKED, TOKEN_EXPIRED), whose organisation is gone (ORG_NOT_FOUND) or whose member or user row is (MEMBERSHIP_GONE).
The error envelope every non-2xx answer uses.
object
Human-readable explanation.
Machine-readable reason. Absent on a few legacy 400s.
Examplegenerated
{ "error": "example", "code": "example"}An API token (code: SESSION_REQUIRED), or a session in another organisation. Like every route behind a session: a session signed in but in no organisation is refused code: NO_ORG, a banned person code: BANNED, and a closed organisation code: ORG_CLOSED.
The error envelope every non-2xx answer uses.
object
Human-readable explanation.
Machine-readable reason. Absent on a few legacy 400s.
Examplegenerated
{ "error": "example", "code": "example"}The restore switch is on (code: MAINTENANCE): every route but /health and /robots.txt is refused before anything is read, except the operator’s own POST /staff/people/{id}/delete with the ADMIN_TOKEN. Sloose is down for maintenance. Please try again in a few minutes.
object
Example
{ "code": "MAINTENANCE"}Headers
Section titled “Headers”Seconds until asking again is worth it (300 while the switch is on).