Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
d94e654
add integration for MM in upload_annotations
Jul 14, 2026
c4ac665
Merge pull request #875 from superannotateai/FRIDAY-5282
nareksa Jul 16, 2026
5114860
Code styly updates
VaghinakDev Jul 20, 2026
d331a92
Add grant/revoke team user permissions (FRIDAY-5409)
VaghinakDev Jul 21, 2026
1d7e06d
Enforce team-user permission role mismatch client-side (FRIDAY-5409)
VaghinakDev Jul 22, 2026
4e54ef5
Derive team-user master permission cascade from live group data (FRID…
VaghinakDev Jul 22, 2026
4704d27
Merge branch 'master' into develop
VaghinakDev Jul 22, 2026
77e97b7
update set user permissions enpoint
VaghinakDev Jul 23, 2026
80156c0
added team admin permissions grant/revoke
Aug 3, 2026
d3f7eaf
Merge pull request #876 from superannotateai/FRIDAY-5604
VaghinakDev Aug 4, 2026
dfcaaa3
Implement new auth type
VaghinakDev Aug 4, 2026
ce44868
fix in team permissions logging
Aug 6, 2026
51febf8
Merge pull request #877 from superannotateai/FRIDAY-5604
nareksa Aug 6, 2026
20bc922
Reject Organization API keys in SAClient and drop team_id, update docs
Aug 11, 2026
256b463
removed deprecated functions
VaghinakDev Aug 12, 2026
e4641da
Merge pull request #880 from superannotateai/FRIDAY_5610
nareksa Aug 12, 2026
5ce1abe
Merge pull request #879 from superannotateai/FRIDAY-5630
nareksa Aug 12, 2026
e295224
updated changelog
Aug 12, 2026
842d560
Merge pull request #881 from superannotateai/changelog
VaghinakDev Aug 12, 2026
a156f42
Fix tests
VaghinakDev Aug 13, 2026
8745953
Merge branch 'develop' into FRIDAY_5610
VaghinakDev Aug 13, 2026
bc8649a
Merge pull request #882 from superannotateai/FRIDAY_5610
VaghinakDev Aug 13, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 23 additions & 0 deletions CHANGELOG.rst
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,24 @@ History

All release highlights of this project will be documented in this file.

4.6.0 - Aug 16, 2026
____________________

**Added**

- ``SAClient.grant_team_user_permissions()`` Grants permissions to a team user, with support for granting specific permissions or all available permissions based on the user's role.
- ``SAClient.revoke_team_user_permissions()`` Revokes permissions from a team user, with support for revoking specific permissions or all available permissions based on the user's role.

**Updated**

- ``SAClient.upload_annotations()`` Added the ``integration`` parameter to sign private external URLs when creating new items in Multimodal projects. The integration must already exist on SuperAnnotate and is supported only when ``data_spec="multimodal"``.
- ``SAClient(token=<API key>)`` Added support for authentication using both Personal API Keys and Team API Keys.

**Removed**

- ``SAClient.search_team_contributors()`` Recommended replacements: ``SAClient.get_item_metadata()`` or ``SAClient.list_items()``
- ``SAClient.search_items()`` Recommended replacements: ``SAClient.get_user_metadata()`` or ``SAClient.list_users()``

4.5.9 - July 21, 2026
_____________________
**Updated**
Expand All @@ -15,6 +33,11 @@ _____________________
4.5.8 - July 12, 2026
_____________________

**Added**

- ``SAClient.grant_team_user_permissions()`` Grants team-level user permissions.
- ``SAClient.revoke_team_user_permissions()`` Revokes team-level user permissions.

**Updated**

- ``SAClient.generate_items()`` The name key now supports values with up to 200 characters.
Expand Down
35 changes: 4 additions & 31 deletions README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ Authentication
# by environment variable SA_TOKEN
sa_client = SAClient()
# by token
sa_client = SAClient(token='<team token>')
sa_client = SAClient(token='<API key>')
# by config file
# default path is ~/.superannotate/config.ini
sa_client = SAClient(config_path='~/.superannotate/dev_config.ini')
Expand All @@ -42,8 +42,9 @@ config.ini example
.. code-block:: python

[DEFAULT]
SA_TOKEN = <Token>
SA_TOKEN = <API key>
LOGGING_LEVEL = INFO
LOGGING_PATH = /Users/username/data/superannotate_logs


Using superannotate
Expand All @@ -54,7 +55,7 @@ Using superannotate
from superannotate import SAClient


sa_client =SAClient()
sa_client = SAClient()

project = 'Dogs'

Expand Down Expand Up @@ -110,34 +111,6 @@ Windows (`Anaconda <https://www.anaconda.com/products/individual#windows>`__
) platforms.


Supported Features
------------------

- search/get/create/clone/update/delete projects
- search/get/create/delete folders
- assign folders to project contributors
- upload items to a project from a local or AWS S3 folder
- attach items by URL or from an integrated storage, meanwhile keeping them secure in your cloud provider
- get integrated cloud storages
- upload annotations (also from local or AWS S3 folder)
- delete annotations
- set items annotations statuses
- get/download/export annotations from a project (also to a local or AWS S3 folder)
- invite/search team contributors or add contributors to a specific project
- search/get/copy/move items in a project
- query items using SA Query Language
- define custom metadata for items and upload custom values (query based on your custom metadata)
- upload priority scores
- get available subsets (sets of segregated items), query items in a subset or add items to a subset
- assign or anassign items to project contributors
- download an image that has been uploaded to project
- search/create/download/delete project annotation classes
- search/download models
- run predictions
- convert annotations from/to COCO format
- convert annotation from VOC, SuperVisely, LabelBox, DataLoop, VGG, VoTT, SageMaker, GoogleCloud, YOLO formats
- CLI commands for simple tasks

Questions and Issues
--------------------

Expand Down
1 change: 0 additions & 1 deletion docs/source/api_reference/api_item.rst
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ Items
.. automethod:: superannotate.SAClient.query
.. automethod:: superannotate.SAClient.get_item_by_id
.. automethod:: superannotate.SAClient.list_items
.. automethod:: superannotate.SAClient.search_items
.. automethod:: superannotate.SAClient.attach_items
.. automethod:: superannotate.SAClient.generate_items
.. automethod:: superannotate.SAClient.item_context
Expand Down
3 changes: 2 additions & 1 deletion docs/source/api_reference/api_team.rst
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ Team
.. automethod:: superannotate.SAClient.list_workflows
.. automethod:: superannotate.SAClient.get_integrations
.. automethod:: superannotate.SAClient.invite_contributors_to_team
.. automethod:: superannotate.SAClient.search_team_contributors
.. automethod:: superannotate.SAClient.get_user_metadata
.. automethod:: superannotate.SAClient.set_user_custom_field
.. automethod:: superannotate.SAClient.list_users
Expand All @@ -18,3 +17,5 @@ Team
.. automethod:: superannotate.SAClient.set_user_scores
.. automethod:: superannotate.SAClient.set_contributors_categories
.. automethod:: superannotate.SAClient.remove_contributors_categories
.. automethod:: superannotate.SAClient.grant_team_user_permissions
.. automethod:: superannotate.SAClient.revoke_team_user_permissions
4 changes: 2 additions & 2 deletions docs/source/cli_client.rst
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,11 @@ ________________________
Initialization and configuration
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

To initialize CLI (and SDK) with team token:
To initialize CLI (and SDK) with an API key:

.. code-block:: bash

superannotatecli init --token <token>
superannotatecli init --token <API key>
[--logging_level <NOTSET/INFO/DEBUG/WARNING/ERROR/CRITICAL (Default=INFO)>]
[--logging_path <Default=/Users/username/.superannotate/logs>]

Expand Down
2 changes: 0 additions & 2 deletions docs/source/userguide/SDK_Functions_sheet.csv
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@ Folders,search_folders(),Yes,Not Relevant,Not Relevant,Not Relevant,Not Relevant
Items,query(),Yes,Not Relevant,Not Relevant,Not Relevant,Not Relevant
,get_item_by_id(),Yes,Not Relevant,Not Relevant,Not Relevant,Not Relevant
,list_items(),Yes,Not Relevant,Not Relevant,Not Relevant,Not Relevant
,search_items(),Yes,Not Relevant,Not Relevant,Not Relevant,Not Relevant
,attach_items(),Not Relevant,Not Relevant,No,No,Not Relevant
,item_context(),Yes,Not Relevant,Not Relevant,Not Relevant,Not Relevant
,copy_items(),Yes,Not Relevant,Not Relevant,Not Relevant,Not Relevant
Expand Down Expand Up @@ -74,7 +73,6 @@ Images,download_image(),Not Relevant,Not Relevant,Not Relevant,Not Relevant,Not
Team,get_team_metadata(),Not Relevant,Not Relevant,Not Relevant,Not Relevant,Not Relevant
,get_integrations(),Not Relevant,Not Relevant,Not Relevant,Not Relevant,Not Relevant
,invite_contributors_to_team(),Not Relevant,Not Relevant,Not Relevant,Not Relevant,Not Relevant
,search_team_contributors(),Not Relevant,Not Relevant,Not Relevant,Not Relevant,Not Relevant
,get_user_metadata(),Not Relevant,Not Relevant,Not Relevant,Not Relevant,Not Relevant
,set_user_custom_field(),Not Relevant,Not Relevant,Not Relevant,Not Relevant,Not Relevant
,list_users(),Not Relevant,Not Relevant,Not Relevant,Not Relevant,Not Relevant
Expand Down
18 changes: 13 additions & 5 deletions docs/source/userguide/quickstart.rst
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,16 @@ It can be installed on Ubuntu with:
Initialization and authorization
================================

To use the SDK, you need to create a config file with a team-specific authentication token. The token is available
to team admins on the team settings page at https://doc.superannotate.com/docs/token-for-python-sdk#generate-a-token-for-python-sdk.
To use the SDK, you need to create a config file with an API key. The API key is available to team owners and team admins
on the team setup page, for more details please visit our documentation at https://doc.superannotate.com/docs/api-keys.

**API key types**

- **Team API key** — scoped to one team. Works with ``SAClient``.
- **Personal (team-user) API key** — scoped to one team, tied to your user. Works with ``SAClient``.
- **Organization API key** — not scoped to a team. Not supported by the SDK;
``SAClient`` will reject it.


SAClient can be used with or without arguments
______________________________________________
Expand All @@ -52,7 +60,7 @@ ______________________________________________

.. code-block:: bash

superannotatecli init --token <token>
superannotatecli init --token <API key>
[--logging_level <NOTSET/INFO/DEBUG/WARNING/ERROR/CRITICAL (Default=INFO)>]
[--logging_path <Default=/Users/username/.superannotate/logs>]

Expand All @@ -66,7 +74,7 @@ ______________________________________________
from superannotate import SAClient


SAClient(token="<token>")
sa_client = SAClient(token="<API key>")


*Method 2:* Create a custom config file:
Expand All @@ -84,7 +92,7 @@ Custom config.ini example:
.. code-block:: ini

[DEFAULT]
SA_TOKEN = <token>
SA_TOKEN = <API key>
LOGGING_LEVEL = INFO
LOGGING_PATH = /Users/username/data/superannotate_logs

Expand Down
2 changes: 1 addition & 1 deletion pytest.ini
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,4 @@ minversion = 3.7
log_cli=true
python_files = test_*.py
;pytest_plugins = ['pytest_profiling']
;addopts = -n 6 --dist loadscope
addopts = -n 6 --dist loadscope
4 changes: 2 additions & 2 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
pydantic~=2.5
pydantic-extra-types~=2.11
aiohttp~=3.8
aiohttp~=3.14
boto3~=1.42
opencv-python-headless~=4.7
plotly~=6.5
pandas~=2.0
pillow~=12.1
pillow~=12.3
tqdm~=4.66
requests~=2.33
aiofiles~=25.1
Expand Down
2 changes: 1 addition & 1 deletion src/superannotate/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
import os
import sys

__version__ = "4.5.9"
__version__ = "4.6.0dev1"


os.environ.update({"sa_version": __version__})
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -199,7 +199,7 @@ def get_image_dimensions(self, image_path):
else:
try:
img = Image.open(image_path)
img_width, img_height = img.size()
img_width, img_height = img.size
except Exception as e:
raise

Expand Down
10 changes: 7 additions & 3 deletions src/superannotate/lib/app/interface/base_interface.py
Original file line number Diff line number Diff line change
Expand Up @@ -124,11 +124,14 @@ def get_mp_instance(self) -> Mixpanel:

@staticmethod
@lru_cache
def get_default_payload(team_name, user_email):
def get_default_payload(team_name, user_email, auth_type):
return {
"SDK": True,
"Team": team_name,
"User Email": user_email,
# How the client authenticated: "sdk" for a legacy team token,
# "api_key" for a scoped API key.
"Auth Type": auth_type,
"Version": os.environ["sa_version"],
"Python version": platform.python_version(),
"Python interpreter type": platform.python_implementation(),
Expand Down Expand Up @@ -205,11 +208,12 @@ def _track_method(self, args, kwargs, success: bool):
arguments = self.extract_arguments(self.function, *args, **kwargs)
event_name, properties = self.default_parser(function_name, arguments)
user_email = client.controller.current_user.email
team_name = client.controller.team_data.name
team_name = client.controller.team_name
auth_type = client.controller.token_context.auth_type

properties["Success"] = success
default = self.get_default_payload(
team_name=team_name, user_email=user_email
team_name=team_name, user_email=user_email, auth_type=auth_type
)
self._track(
user_email,
Expand Down
6 changes: 3 additions & 3 deletions src/superannotate/lib/app/interface/cli_interface.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,10 +33,10 @@ def init(
logging_path: str = constances.LOG_FILE_LOCATION,
):
"""
To initialize CLI (and SDK) with team token
Input the team SDK token from https://app.superannotate.com/team
To initialize CLI (and SDK) with API key.
The API key is available on the team setup page, for more details please visit our documentation at https://doc.superannotate.com/docs/api-keys.

:param token: the team token
:param token: the API key
:type token: str

:param logging_level: logging level, default is "INFO"
Expand Down
Loading
Loading