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.

Stáhnout schema.graphql

Loading Playground…

#Autentizace

Použijte API klíč k autentizaci. Klíče spravujte v Profil → API Keys.

Profile → API KeysGenerová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.

POST
https://stacklinker.com/api/graphql

Vrací 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.

POST
https://stacklinker.com/api/graphql

Strá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}.

POST
https://stacklinker.com/api/graphql

Jednotlivý 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.

POST
https://stacklinker.com/api/graphql

Strom 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.

POST
https://stacklinker.com/api/graphql

Zá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

POST
https://stacklinker.com/api/graphql

Creates 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

POST
https://stacklinker.com/api/graphql

Creates 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

POST
https://stacklinker.com/api/graphql

Get 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 } }"}'
POST
https://stacklinker.com/api/graphql

Create a new 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 CreateWorkspace($name: String!) { createWorkspaceWorkspace(input: { name: $name }) { workspace { id name success errors } } }"}'
POST
https://stacklinker.com/api/graphql

Update 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 } } }"}'
POST
https://stacklinker.com/api/graphql

Delete 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 } } }"}'
POST
https://stacklinker.com/api/graphql

Leave 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 LeaveWorkspace($workspaceId: ID!) { leaveWorkspaceWorkspace(input: { workspaceId: $workspaceId }) { workspace { id success errors } } }"}'

#Folder & Bookmark Actions

POST
https://stacklinker.com/api/graphql

Rename a 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 UpdateFolder($folderId: ID!, $name: String!) { updateFolderFolder(input: { folderId: $folderId, name: $name }) { folder { id name success errors } } }"}'
POST
https://stacklinker.com/api/graphql

Delete a 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 DeleteFolder($folderId: ID!) { deleteFolderFolder(input: { folderId: $folderId }) { folder { id success errors } } }"}'
POST
https://stacklinker.com/api/graphql

Move 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 } } }"}'
POST
https://stacklinker.com/api/graphql

Update bookmark name and URL.

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 UpdateBookmark($bookmarkId: ID!, $name: String!, $url: String!) { updateBookmarkBookmark(input: { bookmarkId: $bookmarkId, name: $name, url: $url }) { bookmark { id name url success errors } } }"}'
POST
https://stacklinker.com/api/graphql

Delete 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 DeleteBookmark($bookmarkId: ID!) { deleteBookmarkBookmark(input: { bookmarkId: $bookmarkId }) { bookmark { id success errors } } }"}'
POST
https://stacklinker.com/api/graphql

Move 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

POST
https://stacklinker.com/api/graphql

List 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 } }"}'
POST
https://stacklinker.com/api/graphql

Invite user to 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 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 } } }"}'
POST
https://stacklinker.com/api/graphql

Accept invitation.

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 AcceptWorkspaceInvitation($invitationId: ID!) { acceptWorkspaceInvitationWorkspaceInvitation(input: { invitationId: $invitationId }) { workspaceInvitation { id success errors } } }"}'
POST
https://stacklinker.com/api/graphql

Reject invitation.

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 RejectWorkspaceInvitation($invitationId: ID!) { rejectWorkspaceInvitationWorkspaceInvitation(input: { invitationId: $invitationId }) { workspaceInvitation { id success errors } } }"}'

#Sessions & API Keys

POST
https://stacklinker.com/api/graphql

List active login sessions.

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 GetActiveSessions { activeSessions { edges { node { id deviceInfo ipAddress createdAt expiresAt isCurrent } } } }"}'
POST
https://stacklinker.com/api/graphql

Revoke one session.

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 RevokeSession($sessionId: ID!) { revokeSessionActiveSession(input: { sessionId: $sessionId }) { activeSession { id } } }"}'
POST
https://stacklinker.com/api/graphql

Revoke 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 } } }"}'
POST
https://stacklinker.com/api/graphql

List your API keys.

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 GetApiKeys { apiKeys { edges { node { id name keyPrefix scopes createdAt expiresAt isRevoked } } } }"}'
POST
https://stacklinker.com/api/graphql

Create API key.

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 CreateApiKey($name: String!, $expiresInDays: Int, $scopes: [String!]!) { createApiKeyApiKey(input: { name: $name, expiresInDays: $expiresInDays, scopes: $scopes }) { apiKey { id name token success errors } } }"}'
POST
https://stacklinker.com/api/graphql

Revoke API key.

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 RevokeApiKey($apiKeyId: ID!) { revokeApiKeyApiKey(input: { apiKeyId: $apiKeyId }) { apiKey { id isRevoked success errors } } }"}'

#Public Workspaces & Watching

POST
https://stacklinker.com/api/graphql

List public workspaces.

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 GetPublicWorkspaces($search: String) { publicWorkspaces(search: $search) { edges { node { id name publicDescription } } totalCount } }"}'
POST
https://stacklinker.com/api/graphql

Get public workspace detail.

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 GetPublicWorkspace($id: ID!) { publicWorkspace(id: $id) { id name publicDescription } }"}'
POST
https://stacklinker.com/api/graphql

List 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 } }"}'
POST
https://stacklinker.com/api/graphql

List 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 } }"}'
POST
https://stacklinker.com/api/graphql

Watch 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":"mutation WatchWorkspace($watchedWorkspaceId: ID!, $workspaceId: ID) { watchWorkspaceWatchedWorkspace(input: { watchedWorkspaceId: $watchedWorkspaceId, workspaceId: $workspaceId }) { watchedWorkspace { id success errors } } }"}'
POST
https://stacklinker.com/api/graphql

Stop watching 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":"mutation UnwatchWorkspace($watchedWorkspaceId: ID!) { unwatchWorkspaceWatchedWorkspace(input: { watchedWorkspaceId: $watchedWorkspaceId }) { watchedWorkspace { id success errors } } }"}'
POST
https://stacklinker.com/api/graphql

Copy 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 } } }"}'
POST
https://stacklinker.com/api/graphql

Publish/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

POST
https://stacklinker.com/api/graphql

List user groups in 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 GetUserGroups($workspaceId: ID!) { userGroups(workspaceId: $workspaceId) { edges { node { id name members { id userEmail } } } totalCount } }"}'
POST
https://stacklinker.com/api/graphql

Create user group.

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 CreateUserGroup($workspaceId: ID!, $name: String!) { createUserGroupUserGroup(input: { workspaceId: $workspaceId, name: $name }) { userGroup { id name success errors } } }"}'
POST
https://stacklinker.com/api/graphql

Rename user group.

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 UpdateUserGroup($groupId: ID!, $name: String!) { updateUserGroupUserGroup(input: { groupId: $groupId, name: $name }) { userGroup { id name success errors } } }"}'
POST
https://stacklinker.com/api/graphql

Delete user group.

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 DeleteUserGroup($groupId: ID!) { deleteUserGroupUserGroup(input: { groupId: $groupId }) { userGroup { id success errors } } }"}'
POST
https://stacklinker.com/api/graphql

Add member to group.

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 AddUserGroupMember($groupId: ID!, $userId: ID!) { addUserGroupMemberUserGroup(input: { groupId: $groupId, userId: $userId }) { userGroup { id success errors } } }"}'
POST
https://stacklinker.com/api/graphql

Remove member from group.

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 RemoveUserGroupMember($groupId: ID!, $userId: ID!) { removeUserGroupMemberUserGroup(input: { groupId: $groupId, userId: $userId }) { userGroup { id success errors } } }"}'
POST
https://stacklinker.com/api/graphql

List 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 } }"}'
POST
https://stacklinker.com/api/graphql

Create 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 } } }"}'
POST
https://stacklinker.com/api/graphql

Rename 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 } } }"}'
POST
https://stacklinker.com/api/graphql

Delete 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 } } }"}'
POST
https://stacklinker.com/api/graphql

Assign 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 } } }"}'
POST
https://stacklinker.com/api/graphql

Remove 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 } } }"}'
POST
https://stacklinker.com/api/graphql

Apply 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 } } }"}'
POST
https://stacklinker.com/api/graphql

Assign groups to 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 AssignGroupsToBookmark($bookmarkId: ID!, $groupIds: [ID!]!) { assignGroupsToBookmarkBookmark(input: { bookmarkId: $bookmarkId, groupIds: $groupIds }) { bookmark { id success errors } } }"}'
POST
https://stacklinker.com/api/graphql

Remove groups from 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 RemoveGroupsFromBookmark($bookmarkId: ID!, $groupIds: [ID!]!) { removeGroupsFromBookmarkBookmark(input: { bookmarkId: $bookmarkId, groupIds: $groupIds }) { bookmark { id success errors } } }"}'
POST
https://stacklinker.com/api/graphql

Replace 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

POST
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 } } } }"}'
POST
https://stacklinker.com/api/graphql

Change account password.

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 ChangePassword($currentPassword: String!, $newPassword: String!) { changePasswordUserSettings(input: { currentPassword: $currentPassword, newPassword: $newPassword }) { userSettings { success errors } } }"}'
POST
https://stacklinker.com/api/graphql

Mark onboarding as completed.

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 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.

POST
https://stacklinker.com/api/workspaces/{uuid}/import-bookmarks

Import 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

Bearer
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": []
}
POST
https://stacklinker.com/api/workspaces/{uuid}/import-bookmarks-ai

Import 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

Bearer
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": []
}
POST
https://stacklinker.com/api/workspaces/{uuid}/reorganize-ai

Reorganize 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

Bearer
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.