Skip to content

Route Map

Every path below is under http://127.0.0.1:19821 and comes from the daemon’s own OpenAPI document. Only /api/v1/token in the first group is reachable without a bearer token.

Where the document carries no description for a route, none is invented here. Fetch /api/v1/openapi.json, or open /api/v1/docs, for request and response schemas.

Is the daemon up, is it signed in, and when did it last talk to the server. GET /api/v1/sync answers what the last sync did without doing another one; POST runs one.

PathMethods
/api/v1/statusGET
/api/v1/syncGET, POST
/api/v1/tokenPOST

/health and /api/v1/health also exist, outside the documented set.

The two routes an integration usually wants.

POST /api/v1/verify checks three words against the connections this device holds a secret for. It is purely local. Read the conclusive field before you show anything: it is false whenever some connection could not be checked, including the common case where nothing is cached. A caller must not say “not verified” unless conclusive is true.

A match carries window — current, or previous for an earlier code the operator still accepts (one by default), with windowsBack saying how far back — and validUntil, the instant that code stops or stopped being current. Show a previous match with that time in local time, and suggest a seal for a message read later. On a connection where every member has their own code, memberName says whose code it was. The reader’s own code never matches. This route and the previous codes below need only a read-scoped token.

POST /api/v1/stamp signs content on the device and answers three words, the time it was signed, an assurance level and the URL a recipient opens to check the signature.

PathMethods
/api/v1/stampPOST
/api/v1/verifyPOST

Following people, and the record of verifications.

POST /api/v1/verify/public is the other half of /api/v1/verify: it asks the server whether three words belong to anybody, rather than checking locally.

The /api/v1/trust-cards routes list and change the people this account follows. The path keeps an older name. The {id} on these routes is the id of the person followed, not the id of the follow row.

PathMethods
/api/v1/trust-cardsGET, POST
/api/v1/trust-cards/{id}PATCH, DELETE
/api/v1/trust-cards/{id}/historyGET
/api/v1/trust/metricsGET
/api/v1/verification-logGET
/api/v1/verify/publicPOST

Create, read, rename and delete connections; read the current code for one; mark one a favourite; add and remove members.

GET /api/v1/connections/:id/members/:mid/previous-codes lists one member’s previous codes, newest first, each with words, validFrom and validUntil; :mid is the membership row id. previousWindows is how many the operator accepts. available is false when this device holds no secret to derive them — show that as “cannot show”, not as an empty list. It is local and records nothing. A row that is not a member of that connection answers 404.

PathMethods
/api/v1/connectionsGET, POST
/api/v1/connections/:idGET, PATCH, DELETE
/api/v1/connections/:id/codeGET
/api/v1/connections/:id/favoritePOST
/api/v1/connections/:id/membersPOST
/api/v1/connections/:id/members/:midDELETE
/api/v1/connections/:id/members/:mid/previous-codesGET

GET /api/v1/invitations lists both directions. The rest act on one invitation: approve, decline, or withdraw one you sent.

PathMethods
/api/v1/invitationsGET
/api/v1/invitations/pendingGET
/api/v1/invitations/:id/approvePOST
/api/v1/invitations/:id/declinePOST
/api/v1/invitations/:id/withdrawPOST

Create and revoke codes for people who do not use the app, fetch one as a QR image, or have it sent.

PathMethods
/api/v1/guest-codesGET, POST
/api/v1/guest-codes/:idDELETE
/api/v1/guest-codes/:id/qrGET
/api/v1/guest-codes/:id/sendPOST

The guest verification pages.

PathMethods
/api/v1/external-membersGET, POST
/api/v1/external-members/:idDELETE

Tags organise connections. The assign path takes both ids: the tag, then the connection.

PathMethods
/api/v1/tagsGET, POST
/api/v1/tags/:idPATCH, DELETE
/api/v1/tags/:id/assign/:cidPOST, DELETE

Connection presets, and which one is the default.

PathMethods
/api/v1/presetsGET, POST
/api/v1/presets/{id}PATCH, DELETE
/api/v1/presets/{id}/defaultPOST
/api/v1/presets/defaultDELETE

Open links and the approval requests they produce. A link can be paused, resumed or given a new slug; a request can be approved or declined. suggest proposes a slug.

PathMethods
/api/v1/open-linksGET, POST
/api/v1/open-links/suggestGET
/api/v1/open-links/{id}DELETE
/api/v1/open-links/{id}/pausePATCH
/api/v1/open-links/{id}/resumePATCH
/api/v1/open-links/{id}/slugPATCH
/api/v1/open-links/requestsGET
/api/v1/open-links/requests/{id}/approvePOST
/api/v1/open-links/requests/{id}/declinePOST

GET /api/v1/context answers account identity and organisation context in one call — the active organisation is present only when there is one.

POST /api/v1/context/active-org switches the active organisation, or clears it for personal context. It is session-scoped: it writes this session’s choice, not the persistent user default, so a desktop choice does not retarget other devices.

/api/v1/profiles/{id} is a minimal public profile of somebody else, and /keys their active public keys.

PathMethods
/api/v1/contextGET
/api/v1/context/active-orgPOST
/api/v1/profileGET, PATCH
/api/v1/profiles/{id}GET
/api/v1/profiles/{id}/keysGET
/api/v1/preferencesGET, PATCH
/api/v1/notificationsGET, DELETE
/api/v1/notifications/readPOST

Devices, sessions, email addresses, data exports and account deletion.

An export is asked for and built by the server: POST /api/v1/exports answers an id, not a file, and /api/v1/exports/{id}/download answers a signed, expiring link to a finished one.

DELETE /api/v1/account deletes the account and everything in it, and cannot be undone. It requires a body carrying confirmEmail, the account’s own address, which the daemon compares on the machine before it calls anything. A call with no body, or with the wrong address, is refused.

PathMethods
/api/v1/devicesGET
/api/v1/devices/{id}DELETE
/api/v1/sessionsGET
/api/v1/sessions/{id}DELETE
/api/v1/emailsGET, POST
/api/v1/exportsGET, POST, DELETE
/api/v1/exports/{id}/downloadGET
/api/v1/accountDELETE

Members, groups, alerts and analytics.

The member, group and alert routes need a full token, on every method. The activity and analytics reads are ordinary GETs and a read token is enough.

PathMethods
/api/v1/org/membersGET
/api/v1/org/members/{id}GET
/api/v1/org/members/{id}/activatePOST
/api/v1/org/members/{id}/suspendPOST
/api/v1/org/members/bulk-invitePOST
/api/v1/org/groupsGET, POST
/api/v1/org/groups/{id}PATCH, DELETE
/api/v1/org/groups/{id}/membersPOST, DELETE
/api/v1/org/alertsGET, POST
/api/v1/org/alerts/{id}PATCH, DELETE
/api/v1/org/activityGET
/api/v1/org/activity/summaryGET
/api/v1/org/analytics/dashboardGET
/api/v1/org/analytics/trendsGET

Listing, minting and revoking tokens. Also full only.

PathMethods
/api/v1/api-tokensGET, POST
/api/v1/api-tokens/{id}DELETE

One turn of the assistant conversation, a rating for an answer, and feedback to the team. The chat answer is passed through from the server, so the daemon does not fix its shape.

PathMethods
/api/v1/chatPOST
/api/v1/chat/ratePOST
/api/v1/feedbackPOST