API dokumentace
Integrujte se se StackLinkerem pomocí GraphQL. Autentizujte pomocí API klíče a spravujte workspaces, záložky a složky programově.
#Try It
Spouštějte dotazy a mutace přímo v prohlížeči. Přidejte API klíč v panelu Headers.
#Autentizace
Použijte API klíč k autentizaci. Klíče spravujte v Profil → API Keys.
Profile → API Keys — Generování a správa API klíčů
Provide your API key in the Authorization header:Authorization: Bearer YOUR_API_KEY
#Base URL
https://stacklinker.com#GraphQL endpoint
Všechny operace API používají GraphQL. Posílejte POST požadavky na endpoint s dotazem (nebo mutací) v těle.
POST https://stacklinker.com/api/graphql#me
Vrací aktuálně přihlášeného uživatele. Pole preferredLocale se používá např. u e-mailů a výchozích jazykových voleb. Na webu se aktualizuje při přepnutí jazyka v patičce, pokud jste přihlášeni.
https://stacklinker.com/api/graphqlVrací aktuálně přihlášeného uživatele.
API keys: Profile → API Keys
curl -X POST https://stacklinker.com/api/graphql \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query":"query Me { me { id email nickname preferredLocale } }"}'Response
{
"data": {
"me": {
"id": "/api/users/...",
"email": "user@example.com",
"nickname": "John",
"preferredLocale": "en"
}
}
}#workspaces
Stránkovaný seznam pracovních prostorů. Použijte first/after pro cursor paginaci.
https://stacklinker.com/api/graphqlStránkovaný seznam pracovních prostorů. Použijte first/after pro cursor paginaci.
API keys: Profile → API Keys
curl -X POST https://stacklinker.com/api/graphql \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query":"query Workspaces { workspaces(first: 10, after: null) { edges { node { id name isPersonal } cursor } pageInfo { hasNextPage endCursor } totalCount } }"}'#workspace
Jednotlivý workspace podle ID. Formát IRI: /api/workspaces/{uuid}.
https://stacklinker.com/api/graphqlJednotlivý workspace podle ID. Formát IRI: /api/workspaces/{uuid}.
API keys: Profile → API Keys
curl -X POST https://stacklinker.com/api/graphql \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query":"query Workspace($workspaceId: ID!) { workspace(id: $workspaceId) { id name members { userEmail role } } }"}'#folders
Strom složek pro workspace. Podporuje cursor paginaci.
https://stacklinker.com/api/graphqlStrom složek pro workspace. Podporuje cursor paginaci.
API keys: Profile → API Keys
curl -X POST https://stacklinker.com/api/graphql \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query":"query Folders($workspaceId: ID!) { folders(workspaceId: $workspaceId) { edges { node { id name parentId } } totalCount } }"}'#bookmarks
Záložky v workspace. Podporuje cursor paginaci.
https://stacklinker.com/api/graphqlZáložky v workspace. Podporuje cursor paginaci.
API keys: Profile → API Keys
curl -X POST https://stacklinker.com/api/graphql \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query":"query Bookmarks($workspaceId: ID!) { bookmarks(workspaceId: $workspaceId) { edges { node { id name url folderId labels { id name } } } totalCount } }"}'#Vytvořit záložku
https://stacklinker.com/api/graphqlCreates a new bookmark in a workspace or folder.
API keys: Profile → API Keys
curl -X POST https://stacklinker.com/api/graphql \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query":"mutation CreateBookmark($workspaceId: ID!, $folderId: ID!) { createBookmarkBookmark(input: { workspaceId: $workspaceId folderId: $folderId name: \"My Bookmark\" url: \"https://example.com\" }) { bookmark { id name url } } }"}'Response
{
"data": {
"createBookmarkBookmark": {
"bookmark": {
"id": "/api/bookmarks/...",
"name": "My Bookmark",
"url": "https://example.com"
}
}
}
}#Vytvořit složku
https://stacklinker.com/api/graphqlCreates a new folder in a workspace.
API keys: Profile → API Keys
curl -X POST https://stacklinker.com/api/graphql \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query":"mutation CreateFolder($workspaceId: ID!) { createFolderFolder(input: { workspaceId: $workspaceId name: \"New Folder\" parentId: null }) { folder { id name } } }"}'#Workspace Actions
https://stacklinker.com/api/graphqlGet paginated members of a workspace.
API keys: Profile → API Keys
curl -X POST https://stacklinker.com/api/graphql \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query":"query GetPaginatedWorkspaceMembers($workspaceId: ID!, $first: Int, $after: String) { paginatedWorkspaceMembers(workspaceId: $workspaceId, first: $first, after: $after) { edges { node { id userEmail role } cursor } pageInfo { hasNextPage endCursor } totalCount } }"}'curl -X POST https://stacklinker.com/api/graphql \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query":"mutation CreateWorkspace($name: String!) { createWorkspaceWorkspace(input: { name: $name }) { workspace { id name success errors } } }"}'https://stacklinker.com/api/graphqlUpdate workspace name and optional icon.
API keys: Profile → API Keys
curl -X POST https://stacklinker.com/api/graphql \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query":"mutation UpdateWorkspace($id: ID!, $name: String!, $icon: String) { updateWorkspaceWorkspace(input: { id: $id, name: $name, icon: $icon }) { workspace { id name icon success errors } } }"}'https://stacklinker.com/api/graphqlDelete a workspace (only when allowed).
API keys: Profile → API Keys
curl -X POST https://stacklinker.com/api/graphql \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query":"mutation DeleteWorkspace($id: ID!) { deleteWorkspaceWorkspace(input: { id: $id }) { workspace { id success errors } } }"}'curl -X POST https://stacklinker.com/api/graphql \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query":"mutation LeaveWorkspace($workspaceId: ID!) { leaveWorkspaceWorkspace(input: { workspaceId: $workspaceId }) { workspace { id success errors } } }"}'#Folder & Bookmark Actions
curl -X POST https://stacklinker.com/api/graphql \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query":"mutation UpdateFolder($folderId: ID!, $name: String!) { updateFolderFolder(input: { folderId: $folderId, name: $name }) { folder { id name success errors } } }"}'curl -X POST https://stacklinker.com/api/graphql \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query":"mutation DeleteFolder($folderId: ID!) { deleteFolderFolder(input: { folderId: $folderId }) { folder { id success errors } } }"}'https://stacklinker.com/api/graphqlMove folder to another parent/position.
API keys: Profile → API Keys
curl -X POST https://stacklinker.com/api/graphql \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query":"mutation MoveFolder($folderId: ID!, $parentId: ID, $position: Int!) { moveFolderFolder(input: { folderId: $folderId, parentId: $parentId, position: $position }) { folder { id parentId position success errors } } }"}'curl -X POST https://stacklinker.com/api/graphql \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query":"mutation UpdateBookmark($bookmarkId: ID!, $name: String!, $url: String!) { updateBookmarkBookmark(input: { bookmarkId: $bookmarkId, name: $name, url: $url }) { bookmark { id name url success errors } } }"}'curl -X POST https://stacklinker.com/api/graphql \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query":"mutation DeleteBookmark($bookmarkId: ID!) { deleteBookmarkBookmark(input: { bookmarkId: $bookmarkId }) { bookmark { id success errors } } }"}'https://stacklinker.com/api/graphqlMove bookmark to folder/position.
API keys: Profile → API Keys
curl -X POST https://stacklinker.com/api/graphql \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query":"mutation MoveBookmark($id: ID!, $folderId: ID, $position: Int!) { moveBookmarkBookmark(input: { id: $id, folderId: $folderId, position: $position }) { bookmark { id folderId position success errors } } }"}'#Invitations
https://stacklinker.com/api/graphqlList invitations for current user.
API keys: Profile → API Keys
curl -X POST https://stacklinker.com/api/graphql \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query":"query GetWorkspaceInvitations { workspaceInvitations { edges { node { id workspaceName role createdAt } } totalCount } }"}'curl -X POST https://stacklinker.com/api/graphql \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query":"mutation CreateWorkspaceInvitation($workspaceId: ID!, $email: String!, $role: String!, $groupIds: [ID!]) { createWorkspaceInvitationWorkspaceInvitation( input: { workspaceId: $workspaceId, email: $email, role: $role, groupIds: $groupIds } ) { workspaceInvitation { id email role success errors } } }"}'curl -X POST https://stacklinker.com/api/graphql \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query":"mutation AcceptWorkspaceInvitation($invitationId: ID!) { acceptWorkspaceInvitationWorkspaceInvitation(input: { invitationId: $invitationId }) { workspaceInvitation { id success errors } } }"}'curl -X POST https://stacklinker.com/api/graphql \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query":"mutation RejectWorkspaceInvitation($invitationId: ID!) { rejectWorkspaceInvitationWorkspaceInvitation(input: { invitationId: $invitationId }) { workspaceInvitation { id success errors } } }"}'#Sessions & API Keys
curl -X POST https://stacklinker.com/api/graphql \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query":"query GetActiveSessions { activeSessions { edges { node { id deviceInfo ipAddress createdAt expiresAt isCurrent } } } }"}'curl -X POST https://stacklinker.com/api/graphql \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query":"mutation RevokeSession($sessionId: ID!) { revokeSessionActiveSession(input: { sessionId: $sessionId }) { activeSession { id } } }"}'https://stacklinker.com/api/graphqlRevoke all sessions except current.
API keys: Profile → API Keys
curl -X POST https://stacklinker.com/api/graphql \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query":"mutation RevokeAllSessions { revokeAllSessionsActiveSession(input: {}) { activeSession { id } } }"}'curl -X POST https://stacklinker.com/api/graphql \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query":"query GetApiKeys { apiKeys { edges { node { id name keyPrefix scopes createdAt expiresAt isRevoked } } } }"}'curl -X POST https://stacklinker.com/api/graphql \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query":"mutation CreateApiKey($name: String!, $expiresInDays: Int, $scopes: [String!]!) { createApiKeyApiKey(input: { name: $name, expiresInDays: $expiresInDays, scopes: $scopes }) { apiKey { id name token success errors } } }"}'curl -X POST https://stacklinker.com/api/graphql \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query":"mutation RevokeApiKey($apiKeyId: ID!) { revokeApiKeyApiKey(input: { apiKeyId: $apiKeyId }) { apiKey { id isRevoked success errors } } }"}'#Public Workspaces & Watching
curl -X POST https://stacklinker.com/api/graphql \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query":"query GetPublicWorkspaces($search: String) { publicWorkspaces(search: $search) { edges { node { id name publicDescription } } totalCount } }"}'curl -X POST https://stacklinker.com/api/graphql \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query":"query GetPublicWorkspace($id: ID!) { publicWorkspace(id: $id) { id name publicDescription } }"}'https://stacklinker.com/api/graphqlList folders in public workspace.
API keys: Profile → API Keys
curl -X POST https://stacklinker.com/api/graphql \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query":"query GetPublicFolders($workspaceId: ID!) { publicFolders(workspaceId: $workspaceId) { edges { node { id name parentId position } } totalCount } }"}'https://stacklinker.com/api/graphqlList bookmarks in public workspace.
API keys: Profile → API Keys
curl -X POST https://stacklinker.com/api/graphql \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query":"query GetPublicBookmarks($workspaceId: ID!) { publicBookmarks(workspaceId: $workspaceId) { edges { node { id name url folderId position } } totalCount } }"}'curl -X POST https://stacklinker.com/api/graphql \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query":"mutation WatchWorkspace($watchedWorkspaceId: ID!, $workspaceId: ID) { watchWorkspaceWatchedWorkspace(input: { watchedWorkspaceId: $watchedWorkspaceId, workspaceId: $workspaceId }) { watchedWorkspace { id success errors } } }"}'curl -X POST https://stacklinker.com/api/graphql \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query":"mutation UnwatchWorkspace($watchedWorkspaceId: ID!) { unwatchWorkspaceWatchedWorkspace(input: { watchedWorkspaceId: $watchedWorkspaceId }) { watchedWorkspace { id success errors } } }"}'https://stacklinker.com/api/graphqlCopy public workspace into your own.
API keys: Profile → API Keys
curl -X POST https://stacklinker.com/api/graphql \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query":"mutation CopyFromPublicWorkspace($sourceWorkspaceId: ID!, $name: String!) { copyFromPublicWorkspaceWorkspace(input: { sourceWorkspaceId: $sourceWorkspaceId, name: $name }) { workspace { id name success errors } } }"}'https://stacklinker.com/api/graphqlPublish/unpublish workspace and update public description.
API keys: Profile → API Keys
curl -X POST https://stacklinker.com/api/graphql \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query":"mutation UpdateWorkspacePublic($workspaceId: ID!, $isPublic: Boolean!, $publicDescription: String) { updateWorkspacePublicWorkspace(input: { workspaceId: $workspaceId, isPublic: $isPublic, publicDescription: $publicDescription }) { workspace { id isPublic publicDescription success errors } } }"}'#User Groups, Labels & Access
curl -X POST https://stacklinker.com/api/graphql \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query":"query GetUserGroups($workspaceId: ID!) { userGroups(workspaceId: $workspaceId) { edges { node { id name members { id userEmail } } } totalCount } }"}'curl -X POST https://stacklinker.com/api/graphql \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query":"mutation CreateUserGroup($workspaceId: ID!, $name: String!) { createUserGroupUserGroup(input: { workspaceId: $workspaceId, name: $name }) { userGroup { id name success errors } } }"}'curl -X POST https://stacklinker.com/api/graphql \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query":"mutation UpdateUserGroup($groupId: ID!, $name: String!) { updateUserGroupUserGroup(input: { groupId: $groupId, name: $name }) { userGroup { id name success errors } } }"}'curl -X POST https://stacklinker.com/api/graphql \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query":"mutation DeleteUserGroup($groupId: ID!) { deleteUserGroupUserGroup(input: { groupId: $groupId }) { userGroup { id success errors } } }"}'curl -X POST https://stacklinker.com/api/graphql \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query":"mutation AddUserGroupMember($groupId: ID!, $userId: ID!) { addUserGroupMemberUserGroup(input: { groupId: $groupId, userId: $userId }) { userGroup { id success errors } } }"}'curl -X POST https://stacklinker.com/api/graphql \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query":"mutation RemoveUserGroupMember($groupId: ID!, $userId: ID!) { removeUserGroupMemberUserGroup(input: { groupId: $groupId, userId: $userId }) { userGroup { id success errors } } }"}'https://stacklinker.com/api/graphqlList your personal bookmark labels in a workspace.
API keys: Profile → API Keys
curl -X POST https://stacklinker.com/api/graphql \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query":"query GetBookmarkLabels($workspaceId: ID!) { bookmarkLabels(workspaceId: $workspaceId) { edges { node { id name workspaceId createdAt } } totalCount } }"}'https://stacklinker.com/api/graphqlCreate a new personal bookmark label for a workspace.
API keys: Profile → API Keys
curl -X POST https://stacklinker.com/api/graphql \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query":"mutation CreateBookmarkLabel($workspaceId: ID!, $name: String!) { createBookmarkLabelBookmarkLabel(input: { workspaceId: $workspaceId, name: $name }) { bookmarkLabel { id name workspaceId createdAt success errors } } }"}'https://stacklinker.com/api/graphqlRename one of your personal bookmark labels.
API keys: Profile → API Keys
curl -X POST https://stacklinker.com/api/graphql \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query":"mutation UpdateBookmarkLabel($labelId: ID!, $name: String!) { updateBookmarkLabelBookmarkLabel(input: { labelId: $labelId, name: $name }) { bookmarkLabel { id name success errors } } }"}'https://stacklinker.com/api/graphqlDelete one of your personal bookmark labels.
API keys: Profile → API Keys
curl -X POST https://stacklinker.com/api/graphql \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query":"mutation DeleteBookmarkLabel($labelId: ID!) { deleteBookmarkLabelBookmarkLabel(input: { labelId: $labelId }) { bookmarkLabel { id success errors } } }"}'https://stacklinker.com/api/graphqlAssign groups to folder (optional public mode).
API keys: Profile → API Keys
curl -X POST https://stacklinker.com/api/graphql \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query":"mutation AssignGroupsToFolder($folderId: ID!, $groupIds: [ID!]!, $isPublic: Boolean) { assignGroupsToFolderFolder(input: { folderId: $folderId, groupIds: $groupIds, isPublic: $isPublic }) { folder { id isPublic success errors } } }"}'https://stacklinker.com/api/graphqlRemove selected groups from folder.
API keys: Profile → API Keys
curl -X POST https://stacklinker.com/api/graphql \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query":"mutation RemoveGroupsFromFolder($folderId: ID!, $groupIds: [ID!]!) { removeGroupsFromFolderFolder(input: { folderId: $folderId, groupIds: $groupIds }) { folder { id success errors } } }"}'https://stacklinker.com/api/graphqlApply groups/public mode to folder and all children.
API keys: Profile → API Keys
curl -X POST https://stacklinker.com/api/graphql \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query":"mutation ApplyGroupsToFolderAndChildren($folderId: ID!, $groupIds: [ID!]!, $isPublic: Boolean) { applyGroupsToFolderAndChildrenFolder(input: { folderId: $folderId, groupIds: $groupIds, isPublic: $isPublic }) { folder { id isPublic success errors } } }"}'curl -X POST https://stacklinker.com/api/graphql \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query":"mutation AssignGroupsToBookmark($bookmarkId: ID!, $groupIds: [ID!]!) { assignGroupsToBookmarkBookmark(input: { bookmarkId: $bookmarkId, groupIds: $groupIds }) { bookmark { id success errors } } }"}'curl -X POST https://stacklinker.com/api/graphql \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query":"mutation RemoveGroupsFromBookmark($bookmarkId: ID!, $groupIds: [ID!]!) { removeGroupsFromBookmarkBookmark(input: { bookmarkId: $bookmarkId, groupIds: $groupIds }) { bookmark { id success errors } } }"}'https://stacklinker.com/api/graphqlReplace your personal labels on a bookmark.
API keys: Profile → API Keys
curl -X POST https://stacklinker.com/api/graphql \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query":"mutation SetBookmarkLabels($bookmarkId: ID!, $labelIds: [ID!]!) { setBookmarkLabelsBookmark(input: { bookmarkId: $bookmarkId, labelIds: $labelIds }) { bookmark { id name labels { id name } success errors } } }"}'#Account Actions
https://stacklinker.com/api/graphqlÚprava přezdívky a/nebo newsletteru. Vynechaná pole zůstanou beze změny. Volitelné preferredLocale (`en` nebo `cs`) mutace stále přijímá pro API klienty; na webu se ukládá automaticky při změně jazyka v patičce. Správci mohou jazyk nastavit uživateli přes updateUserSettingsByAdminUserSettings.
API keys: Profile → API Keys
curl -X POST https://stacklinker.com/api/graphql \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query":"mutation UpdateUserSettings($nickname: String, $preferredLocale: String, $newsletter: Boolean) { updateSettingsUserSettings(input: { nickname: $nickname, preferredLocale: $preferredLocale, newsletter: $newsletter }) { userSettings { success errors user { id nickname preferredLocale newsletter } } } }"}'curl -X POST https://stacklinker.com/api/graphql \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query":"mutation ChangePassword($currentPassword: String!, $newPassword: String!) { changePasswordUserSettings(input: { currentPassword: $currentPassword, newPassword: $newPassword }) { userSettings { success errors } } }"}'curl -X POST https://stacklinker.com/api/graphql \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query":"mutation CompleteOnboarding { completeOnboardingMe(input: {}) { me { id onboardingCompleted } } }"}'#REST Endpoints
These endpoints use standard HTTP (not GraphQL) and accept Authorization: Bearer YOUR_API_KEY. Bookmark import uses multipart/form-data for file upload. Reorganize uses a plain POST with no body.
https://stacklinker.com/api/workspaces/{uuid}/import-bookmarksImport bookmarks from a browser HTML export file (Netscape format). Supports Chrome, Firefox, Safari, Edge exports. Add reset=true to replace all existing bookmarks and folders first (requires admin role).
API keys: Profile → API Keys
curl -X POST https://stacklinker.com/api/workspaces/WORKSPACE_UUID/import-bookmarks \
-H "Authorization: Bearer YOUR_API_KEY" \
-F "file=@/path/to/bookmarks.html" Response
{
"success": true,
"importedFolders": 12,
"importedBookmarks": 87,
"errors": []
}https://stacklinker.com/api/workspaces/{uuid}/import-bookmarks-aiImport bookmarks from a browser HTML export and let AI create an optimized folder hierarchy. Runs asynchronously — you receive an email when done. Add reset=true to replace existing structure first (requires admin role). Rate limited: 1 per minute, 30 per day.
API keys: Profile → API Keys
curl -X POST https://stacklinker.com/api/workspaces/WORKSPACE_UUID/import-bookmarks-ai \
-H "Authorization: Bearer YOUR_API_KEY" \
-F "file=@/path/to/bookmarks.html" Response
{
"success": true,
"pending": true,
"importedFolders": 0,
"importedBookmarks": 0,
"errors": []
}https://stacklinker.com/api/workspaces/{uuid}/reorganize-aiReorganize all existing workspace bookmarks using AI. All bookmarks are preserved but the folder structure is replaced with an AI-generated hierarchy. Requires admin role. Runs asynchronously — you receive an email when done. Rate limited: 1 per minute, 30 per day.
API keys: Profile → API Keys
curl -X POST https://stacklinker.com/api/workspaces/WORKSPACE_UUID/reorganize-ai \
-H "Authorization: Bearer YOUR_API_KEY"Response
{
"success": true,
"pending": true,
"errors": []
}#Formát ID
Všechna ID používají IRI formát: /api/workspaces/{uuid}, /api/folders/{uuid}, /api/bookmarks/{uuid}.
#Chyby
GraphQL vrací chyby v poli errors. Validační chyby používají status 422. Neoprávněný přístup 401.
{
"errors": [
{
"message": "Access denied.",
"extensions": { "status": 401 }
}
]
}#Rate limiting
Platí limity požadavků. Pro 429 zkontrolujte hlavičku Retry-After.