Skip to main content

eTiKeT API

REST and Python API for the eTiKeT platform. This package provides the local API service that allows external tools (like the eTiKeT SDK) to interact with the sync agent and manage local authentication.

Overview

The eTiKeT API runs as a local service. It provides:

  • REST API: HTTP endpoints for authentication, sync management, and more
  • Python API: Direct Python functions for internal use

Note: Most users should use the eTiKeT SDK instead of calling this API directly. The SDK provides a simpler, higher-level interface.

Installation

pip install etiket-api

Running the Service

Normally, the sync API runs as a system service in the background (managed by the eTiKeT installer). However, you can run it manually for development or debugging:

python3.11 -m etiket_api

By default, the service runs on http://localhost:10410. The interactive API documentation is available at http://localhost:10410/docs (Swagger UI).


REST API Overview

The REST API is available at http://localhost:10410/api/v1/. Interactive API documentation is available at http://localhost:10410/docs (Swagger UI).

Local API Tokens

Manage API tokens stored on this machine. Tokens allow background sync to authenticate with the server without an active login session.

Method Endpoint Description
POST /auth/local/api-tokens Create a new API token for the current user
GET /auth/local/api-tokens List all locally stored API tokens
DELETE /auth/local/api-tokens/{uid} Revoke a token on the server and delete it locally
GET /auth/local/api-tokens/{uid}/check Check if a token is still valid

Sync Agent

Manage the background sync agent service.

Method Endpoint Description
GET /sync/agent/status Get current sync agent status
GET /sync/agent/errors Get sync agent errors (paginated, optional viewed filter)
PATCH /sync/agent/errors/{error_id} Update a sync-agent error record (currently only the viewed flag)
POST /sync/agent/errors/mark-all-viewed Mark all sync-agent errors as viewed. Returns the number flipped
POST /sync/agent/start Start the sync agent
POST /sync/agent/stop Stop the sync agent
POST /sync/agent/report-error Send an error report to qHarbor
GET /sync/agent/error-report Get an error report for manual sending

Sync Sources

Manage sync sources — configurations that define where data comes from.

Method Endpoint Description
GET /sync/sources List all sync sources
POST /sync/sources Create a new sync source
GET /sync/sources/{id} Get a sync source by ID
GET /sync/sources/name/{name} Get a sync source by name
PATCH /sync/sources/{id} Update a sync source
DELETE /sync/sources/{id} Delete a sync source
POST /sync/sources/{id}/start Start a sync source
POST /sync/sources/{id}/stop Stop a sync source
POST /sync/sources/{id}/take-ownership Claim ownership of a sync source for the current user (overwrites any existing owner)
POST /sync/sources/{id}/release-ownership Release ownership of a sync source. Idempotent — any logged-in user may call (no-op when already unowned)
POST /sync/sources/{id}/reset-sync-items Reset sync items (retry failed or all)
GET /sync/sources/{id}/errors Get sync source errors (paginated, optional viewed filter)
PATCH /sync/sources/{id}/errors/{error_id} Update a sync-source error record (currently only the viewed flag)
POST /sync/sources/{id}/errors/mark-all-viewed Mark all errors of a sync source as viewed. Returns the number flipped
GET /sync/sources/connectors List available connectors
POST /sync/sources/{id}/report-error Send an error report to qHarbor
GET /sync/sources/{id}/error-report Get an error report for manual sending
POST /sync/sources/{id}/scope-mappings Create a new scope mapping
PATCH /sync/sources/{id}/scope-mappings/{identifier} Update a scope mapping
DELETE /sync/sources/{id}/scope-mappings/{identifier} Delete a scope mapping
GET /sync/sources/{id}/scope-mappings/unmapped Get unmapped scope identifiers
POST /sync/sources/{id}/scope-mappings/autoassign Auto-assign scope mappings

Sync Items

Manage sync items — individual datasets to be synchronized.

Method Endpoint Description
GET /sync/items?source_id=... List sync items (with filtering and pagination)
GET /sync/items/{id} Get a sync item by ID
PATCH /sync/items/{id}/reset Reset a sync item for retry
PATCH /sync/items/{id}/prioritize Prioritize a sync item
POST /sync/items/{id}/report-error Send an error report to qHarbor
GET /sync/items/{id}/error-report Get an error report for manual sending

Sync Connectors

Manage sync connector packages.

Method Endpoint Description
GET /sync/connectors List installed connectors
POST /sync/connectors/install/pypi Install a connector from PyPI
POST /sync/connectors/install/local Install a connector from local path
POST /sync/connectors/update/pypi Update a connector from PyPI
POST /sync/connectors/update/local Update a connector from local path
DELETE /sync/connectors/{name} Uninstall a connector

Sync Converters

Manage converter packages for file format conversion.

Method Endpoint Description
GET /sync/converters List installed converters
POST /sync/converters/install/pypi Install a converter from PyPI
POST /sync/converters/install/local Install a converter from local path
POST /sync/converters/update/pypi Update a converter from PyPI
POST /sync/converters/update/local Update a converter from local path
DELETE /sync/converters/{name} Uninstall a converter

Admin

Inspect service state for support and debugging.

Method Endpoint Description
GET /admin/logs/{service}?n=... Return the most recent N lines of a service's log file. service is api or sync_agent. Pass n=-1 to return the full file (default n=500)

Error Handling

All API errors return a consistent JSON error model:

{
  "error": "sync_source_not_found",
  "detail": "Sync source with id 123 not found"
}
  • error: A machine-readable error code (snake_case)
  • detail: A human-readable error message (optional)

Error Codes Reference

General Errors

Error Code Status Description
server_error 500 An internal server error occurred
server_unreachable 502 The remote server cannot be reached

Auth Errors

Error Code Status Description
no_user_logged_in 401 No user is currently logged in
user_already_has_token 409 User already has a local token (delete first)
token_not_found 404 Token uid not found in local database

Sync Agent Errors

Error Code Status Description
sync_agent_not_installed 503 Sync agent service is not installed
sync_agent_already_running 409 Sync agent is already running
sync_agent_already_stopped 409 Sync agent is already stopped
sync_status_error_not_found 404 Sync-status error record not found by id

Sync Source Errors

Error Code Status Description
sync_source_not_found 404 Sync source not found
sync_source_scope_not_found 404 Default scope not found
sync_source_connector_not_found 404 Connector not found
sync_source_name_already_taken 409 Source name already exists
sync_source_already_running 409 Sync source is already running
sync_source_already_stopped 409 Sync source is already stopped
sync_source_config_error 422 Invalid configuration
sync_source_connector_has_no_owner 422 Take-ownership called on a source whose connector does not support ownership (has_owner=False)
sync_source_error_not_found 404 Sync-source error record not found by id
scope_mapping_not_found 404 Scope mapping not found for identifier
scope_mapping_already_exists 409 Scope mapping already exists for identifier
scope_mapping_invalid_scope 404 Target scope UUID does not exist

Sync Item Errors

Error Code Status Description
sync_item_not_found 404 Sync item not found
sync_item_scope_mapping_not_found 404 Sync item has a scope_identifier but no mapping exists

Connector Errors

Error Code Status Description
connector_not_found 404 Connector not found
connector_install_failed 422 Connector installation failed
connector_update_failed 422 Connector update failed
connector_uninstall_failed 422 Connector uninstall failed
connector_invalid_package_path 422 Invalid local package path

Converter Errors

Error Code Status Description
converter_not_found 404 Converter not found
converter_install_failed 422 Converter installation failed
converter_update_failed 422 Converter update failed
converter_uninstall_failed 422 Converter uninstall failed
converter_invalid_package_path 422 Invalid local package path

Admin Errors

Error Code Status Description
log_file_not_found 404 Requested service's log file does not exist on disk

Python API

The Python API provides direct access to functionality. It's primarily intended for internal use by the REST API layer and the sync agent itself.

Local API Tokens

from etiket_api.python_api.auth.local.api_tokens import (
    create_api_token,
    list_api_tokens,
    delete_api_token,
    check_api_token,
)

# Create a token for the current user
token = await create_api_token(name="my-sync-token")
print(token.api_token)  # only shown on create

# List all local tokens
tokens = await list_api_tokens()
for t in tokens:
    print(f"{t.user_name}: {t.api_key_name} ({t.server_url})")

# Check if a token is still valid
result = await check_api_token(api_key_uid="...")
print(result.valid)

# Delete a token (revokes on server first)
await delete_api_token(api_key_uid="...")

Sync Agent

from etiket_api.python_api.sync.sync_agent import (
    get_sync_status,
    get_sync_errors,
    start_sync_agent,
    stop_sync_agent,
    set_sync_status_error_viewed,
    mark_all_sync_status_errors_viewed,
)

# Get current status
status = await get_sync_status()

# Fetch only unviewed errors (UI "unread" pane)
unread = await get_sync_errors(limit=10, skip=0, viewed=False)

# Mark one as viewed; or mark all of them
await set_sync_status_error_viewed(error_id=unread[0].id, viewed=True)
flipped = await mark_all_sync_status_errors_viewed()

# Start/stop the agent
await start_sync_agent()
await stop_sync_agent()

Sync Sources

from etiket_api.python_api.sync.sync_sources import (
    list_sync_sources,
    get_sync_source,
    get_sync_source_by_name,
    update_sync_source,
    delete_sync_source,
    start_sync_source,
    stop_sync_source,
    list_sync_source_definitions,
    reset_sync_source_sync_items,
    take_ownership,
    release_ownership,
    # Scope mapping functions
    create_scope_mapping,
    update_scope_mapping,
    delete_scope_mapping,
    get_unmapped_scope_identifiers,
    autoassign_scope_mappings,
    # Exceptions
    SyncSourceAlreadyRunningError,
    SyncSourceAlreadyStoppedError,
)

# List all sources
sources = list_sync_sources()

# Get a specific source
source = get_sync_source(source_id=1)
source = get_sync_source_by_name("my_source")

# Start/stop a sync source
try:
    source = start_sync_source(source_id=1)
except SyncSourceAlreadyRunningError:
    print("Source is already running")

try:
    source = stop_sync_source(source_id=1)
except SyncSourceAlreadyStoppedError:
    print("Source is already stopped")

# Reset failed sync items for a source (to retry them)
reset_count = reset_sync_source_sync_items(source_id=1)
print(f"Reset {reset_count} failed items")

# Reset ALL sync items (including successful ones)
reset_count = reset_sync_source_sync_items(source_id=1, include_successful=True)
print(f"Reset {reset_count} items (all)")

# List available connectors
connectors = list_sync_source_definitions()

# Claim ownership of a sync source for the current user (overwrites any existing owner)
source = await take_ownership(source_id=1)
print(source.owner)

# Release your own ownership (errors if you are not the current owner)
source = await release_ownership(source_id=1)
assert source.owner is None

# Error-log "viewed" management
from etiket_api.python_api.sync.sync_sources import (
    read_sync_source_errors,
    set_sync_source_error_viewed,
    mark_all_sync_source_errors_viewed,
)

# Fetch only unviewed errors (UI "unread" pane)
unread = await read_sync_source_errors(source_id=1, viewed=False)

# Mark one error as viewed, or un-view it
await set_sync_source_error_viewed(error_id=unread[0].id, viewed=True)

# Mark everything as viewed in one shot; returns the count flipped
flipped = await mark_all_sync_source_errors_viewed(source_id=1)

Scope Mappings

Scope mappings are used when a connector provides per-item scope routing. Each sync item may have a scope_identifier string that needs to be mapped to an actual scope UUID.

import uuid
from etiket_api.python_api.sync.sync_sources import (
    create_scope_mapping,
    update_scope_mapping,
    delete_scope_mapping,
    get_unmapped_scope_identifiers,
    autoassign_scope_mappings,
)

# Find identifiers that don't have a mapping yet
unmapped = get_unmapped_scope_identifiers(sync_source_id=1)
print(f"Unmapped identifiers: {unmapped}")

# Create a mapping from identifier to scope UUID
mapping = create_scope_mapping(
    sync_source_id=1,
    scope_identifier="my_scope_identifier",
    scope_uuid=uuid.UUID("12345678-1234-1234-1234-123456789abc"),
)

# Update an existing mapping to point to a different scope
mapping = update_scope_mapping(
    sync_source_id=1,
    scope_identifier="my_scope_identifier",
    scope_uuid=uuid.UUID("87654321-4321-4321-4321-cba987654321"),
)

# Delete a mapping
delete_scope_mapping(sync_source_id=1, scope_identifier="my_scope_identifier")

# Auto-assign mappings based on scope name matching
# (creates mappings where identifier matches exactly one scope name)
created_count = autoassign_scope_mappings(sync_source_id=1)
print(f"Auto-assigned {created_count} mappings")

Sync Items

from etiket_api.python_api.sync.sync_items import (
    list_sync_items,
    get_sync_item,
    reset_sync_item,
    prioritize_sync_item,
)

# List items for a source
items = list_sync_items(source_id=1)

# Get a specific item
item = get_sync_item(sync_item_id=123)

# Reset or prioritize an item
reset_sync_item(sync_item_id=123)
prioritize_sync_item(sync_item_id=123)

Connectors

from etiket_api.python_api.sync.connectors import (
    list_connectors,
    install_connector_from_pypi,
    install_connector_from_local_path,
    update_connector_from_pypi,
    uninstall_connector,
)

# List installed connectors
connectors = list_connectors()

# Install from PyPI
install_connector_from_pypi("etiket-sync-agent-qcodes")

# Install from local path
install_connector_from_local_path("/path/to/my-connector")

# Update from PyPI
update_connector_from_pypi("etiket-sync-agent-qcodes")

# Uninstall
uninstall_connector("etiket_sync_agent_qcodes")

Converters

from etiket_api.python_api.sync.converters import (
    list_converters,
    install_converter_from_pypi,
    install_converter_from_local_path,
    update_converter_from_pypi,
    uninstall_converter,
)

# List installed converters
converters = list_converters()

# Install from PyPI
install_converter_from_pypi("my-converter-package")

# Install from local path
install_converter_from_local_path("/path/to/my-converter")

# Update from PyPI
update_converter_from_pypi("my-converter-package")

# Uninstall
uninstall_converter("my_converter")

Admin / Logs

from etiket_api.python_api.admin.logs import (
    LogService,
    get_recent_log_lines,
)

# Read the last 500 lines of the API's log file
lines = get_recent_log_lines(LogService.api, n=500)
for line in lines:
    print(line)

# Read the entire log file (up to the 10 MB rotation cap)
all_lines = get_recent_log_lines(LogService.sync_agent, n=-1)

Architecture

┌─────────────────────────────────────────────────────────────┐
│                      eTiKeT SDK                             │
│                   (User-facing Python SDK)                  │
└─────────────────────────┬───────────────────────────────────┘
                          │ HTTP
                          ▼
┌─────────────────────────────────────────────────────────────┐
│                      eTiKeT API                             │
│  ┌──────────────────┐   ┌──────────────────────────────┐    │
│  │    REST API      │   │        Python API            │    │
│  │    (FastAPI)     │──▶│   auth/local, sync/agent,    │    │
│  │                  │   │   sync/sources, sync/items.. │    │
│  └──────────────────┘   └──────────────────────────────┘    │
└─────────────────────────────────────────────────────────────┘
                          │
                          ▼
┌─────────────────────────────────────────────────────────────┐
│                   eTiKeT Sync Agent                         │
│            (Background synchronization service)             │
└─────────────────────────────────────────────────────────────┘

Requirements

  • Python 3.10+
  • etiket_sync_agent
  • etiket_client

Metadata

Release files for etiket-api 0.3.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distributions (wheels)

Table of built distributions (wheels) for etiket-api 0.3.0
File Actions
etiket_api-0.3.0-cp314-cp314-win_amd64.whl CPython 3.14 CPython 3.14 Windows x86-64 Details for etiket_api-0.3.0-cp314-cp314-win_amd64.whl
etiket_api-0.3.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl CPython 3.14 CPython 3.14 Linux glibc 2.28+ x86-64, Linux glibc 2.17+ x86-64 Details for etiket_api-0.3.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
etiket_api-0.3.0-cp314-cp314-macosx_11_0_x86_64.whl CPython 3.14 CPython 3.14 macOS 11.0+ x86-64 Details for etiket_api-0.3.0-cp314-cp314-macosx_11_0_x86_64.whl
etiket_api-0.3.0-cp314-cp314-macosx_11_0_arm64.whl CPython 3.14 CPython 3.14 macOS 11.0+ ARM64 Details for etiket_api-0.3.0-cp314-cp314-macosx_11_0_arm64.whl
etiket_api-0.3.0-cp313-cp313-win_amd64.whl CPython 3.13 CPython 3.13 Windows x86-64 Details for etiket_api-0.3.0-cp313-cp313-win_amd64.whl
etiket_api-0.3.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.17+ x86-64, Linux glibc 2.28+ x86-64 Details for etiket_api-0.3.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
etiket_api-0.3.0-cp313-cp313-macosx_11_0_x86_64.whl CPython 3.13 CPython 3.13 macOS 11.0+ x86-64 Details for etiket_api-0.3.0-cp313-cp313-macosx_11_0_x86_64.whl
etiket_api-0.3.0-cp313-cp313-macosx_11_0_arm64.whl CPython 3.13 CPython 3.13 macOS 11.0+ ARM64 Details for etiket_api-0.3.0-cp313-cp313-macosx_11_0_arm64.whl
etiket_api-0.3.0-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details for etiket_api-0.3.0-cp312-cp312-win_amd64.whl
etiket_api-0.3.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.17+ x86-64, Linux glibc 2.28+ x86-64 Details for etiket_api-0.3.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
etiket_api-0.3.0-cp312-cp312-macosx_11_0_x86_64.whl CPython 3.12 CPython 3.12 macOS 11.0+ x86-64 Details for etiket_api-0.3.0-cp312-cp312-macosx_11_0_x86_64.whl
etiket_api-0.3.0-cp312-cp312-macosx_11_0_arm64.whl CPython 3.12 CPython 3.12 macOS 11.0+ ARM64 Details for etiket_api-0.3.0-cp312-cp312-macosx_11_0_arm64.whl
etiket_api-0.3.0-cp311-cp311-win_amd64.whl CPython 3.11 CPython 3.11 Windows x86-64 Details for etiket_api-0.3.0-cp311-cp311-win_amd64.whl
etiket_api-0.3.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.28+ x86-64, Linux glibc 2.17+ x86-64 Details for etiket_api-0.3.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
etiket_api-0.3.0-cp311-cp311-macosx_11_0_x86_64.whl CPython 3.11 CPython 3.11 macOS 11.0+ x86-64 Details for etiket_api-0.3.0-cp311-cp311-macosx_11_0_x86_64.whl
etiket_api-0.3.0-cp311-cp311-macosx_11_0_arm64.whl CPython 3.11 CPython 3.11 macOS 11.0+ ARM64 Details for etiket_api-0.3.0-cp311-cp311-macosx_11_0_arm64.whl
etiket_api-0.3.0-cp310-cp310-win_amd64.whl CPython 3.10 CPython 3.10 Windows x86-64 Details for etiket_api-0.3.0-cp310-cp310-win_amd64.whl
etiket_api-0.3.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.28+ x86-64, Linux glibc 2.17+ x86-64 Details for etiket_api-0.3.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
etiket_api-0.3.0-cp310-cp310-macosx_11_0_x86_64.whl CPython 3.10 CPython 3.10 macOS 11.0+ x86-64 Details for etiket_api-0.3.0-cp310-cp310-macosx_11_0_x86_64.whl
etiket_api-0.3.0-cp310-cp310-macosx_11_0_arm64.whl CPython 3.10 CPython 3.10 macOS 11.0+ ARM64 Details for etiket_api-0.3.0-cp310-cp310-macosx_11_0_arm64.whl

Total release size: 25.9 MB

Release files / etiket_api-0.3.0-cp314-cp314-win_amd64.whl

Download URL etiket_api-0.3.0-cp314-cp314-win_amd64.whl
Size 518.6 kB
Tags CPython 3.14 Windows x86-64
SHA-256 checksum
How to use checksums
15f4771cd26eee702b44b45b6ed949b1570db1f6e051edd916e0fa9d8d5ab4fa
BLAKE2b-256 checksum
How to use checksums
be1d17fbb73de2c11ab9d0b00f30282ef28b575ac4ac1b6a02f52dcba7fbd804
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / etiket_api-0.3.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl

Download URL etiket_api-0.3.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Size 3.4 MB
Tags CPython 3.14 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
5fee059c8b58798c6e14b1b5cc2b87bea8ebff329582d1b2ccea91875f753ebd
BLAKE2b-256 checksum
How to use checksums
ca54a537bd02497158db2058b50f31896b4f7d05706c8aa989d6b82630dd5c30
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / etiket_api-0.3.0-cp314-cp314-macosx_11_0_x86_64.whl

Download URL etiket_api-0.3.0-cp314-cp314-macosx_11_0_x86_64.whl
Size 617.6 kB
Tags CPython 3.14 macOS 11.0+ x86-64
SHA-256 checksum
How to use checksums
ed95890291fdbb476db407ab3cfdbcd51aeb3943d40ef68da182500da4d5463d
BLAKE2b-256 checksum
How to use checksums
67e810d5e573dd38a8be76fe1ea42d9a4a4c636a8753bde14def74ac157bc442
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / etiket_api-0.3.0-cp314-cp314-macosx_11_0_arm64.whl

Download URL etiket_api-0.3.0-cp314-cp314-macosx_11_0_arm64.whl
Size 552.7 kB
Tags CPython 3.14 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
ab4e964e475d3d15c557a6879bdf037352580075df9355f2417b93e658206fd2
BLAKE2b-256 checksum
How to use checksums
5e02f401f07919f0b9ace730ac9ea74562ea584b2e6456862b95c18c3b8af105
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / etiket_api-0.3.0-cp313-cp313-win_amd64.whl

Download URL etiket_api-0.3.0-cp313-cp313-win_amd64.whl
Size 507.3 kB
Tags CPython 3.13 Windows x86-64
SHA-256 checksum
How to use checksums
cba0f372ead515de833fdf22c090dffac75d50c492472057ce897056e3c94b3a
BLAKE2b-256 checksum
How to use checksums
1385083b94e82bf61fd88650f75e1a223d6f398c99a15ae492804920cb1cb6ab
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / etiket_api-0.3.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl

Download URL etiket_api-0.3.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Size 3.5 MB
Tags CPython 3.13 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
cae283b94fa39491c7e99c66b3f698be09366cc41e40f19f2591abd221518494
BLAKE2b-256 checksum
How to use checksums
f5b4e2709460d273ce35ca2628ac353bf64323505780cc0b6d46d0bd67f4ca33
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / etiket_api-0.3.0-cp313-cp313-macosx_11_0_x86_64.whl

Download URL etiket_api-0.3.0-cp313-cp313-macosx_11_0_x86_64.whl
Size 614.3 kB
Tags CPython 3.13 macOS 11.0+ x86-64
SHA-256 checksum
How to use checksums
8472d99c4ea9cce5e9fc0f4a19179eeff4caee2cf4a8ce27303a458c9f33ace9
BLAKE2b-256 checksum
How to use checksums
ae09b2a24ac914de35bc3b2c703a3091015037d4309b8b9c1bc81497fc67561f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / etiket_api-0.3.0-cp313-cp313-macosx_11_0_arm64.whl

Download URL etiket_api-0.3.0-cp313-cp313-macosx_11_0_arm64.whl
Size 549.9 kB
Tags CPython 3.13 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
bfc0c4c9130081313f737a1497ae3d69de7058732c46ac36487616fdf18704c0
BLAKE2b-256 checksum
How to use checksums
9da616828ea428f6fb6c5e49948234541af472d7da5cfa93c0d800bb9f3a96f2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / etiket_api-0.3.0-cp312-cp312-win_amd64.whl

Download URL etiket_api-0.3.0-cp312-cp312-win_amd64.whl
Size 512.6 kB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
cc531e9a3720c241068be862d74ccc1a8a680dfc9c116a2237a7d5fedc06e4e0
BLAKE2b-256 checksum
How to use checksums
7865c0088e94d7a0a073aea2135662c3713c68f58219dbb58371332307dc3527
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / etiket_api-0.3.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl

Download URL etiket_api-0.3.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Size 3.6 MB
Tags CPython 3.12 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
83ff297afbab7849e409fe7a35dce259883937208bb63dfc5ff93041d9e637f7
BLAKE2b-256 checksum
How to use checksums
ffd0199d4e7ac01bd4df09aa3d4a42e6d7e26de9e19cb44241029f5f99c2fd70
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / etiket_api-0.3.0-cp312-cp312-macosx_11_0_x86_64.whl

Download URL etiket_api-0.3.0-cp312-cp312-macosx_11_0_x86_64.whl
Size 616.8 kB
Tags CPython 3.12 macOS 11.0+ x86-64
SHA-256 checksum
How to use checksums
a504cd078e89436958bf54826d2ed90520153d8af5248ece41d17f67a60cb4af
BLAKE2b-256 checksum
How to use checksums
9ecdc8a59874296cee45f5c5552e30a3c0772a5e8ade9f30262f789979457130
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / etiket_api-0.3.0-cp312-cp312-macosx_11_0_arm64.whl

Download URL etiket_api-0.3.0-cp312-cp312-macosx_11_0_arm64.whl
Size 554.6 kB
Tags CPython 3.12 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
cbe69dc93f2b7df6a08dd93ffbb17f176d38e2fa789663c951b733a88640e8b4
BLAKE2b-256 checksum
How to use checksums
88e3d9ab2d8d9dbbeafa0c00b8fd60e15a6b861fa1bcb2d353636ecff0dc2f52
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / etiket_api-0.3.0-cp311-cp311-win_amd64.whl

Download URL etiket_api-0.3.0-cp311-cp311-win_amd64.whl
Size 533.8 kB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
1186319556045a1a0a0e03d373c7e0b3a68ea725629940da2ec67fad130872e2
BLAKE2b-256 checksum
How to use checksums
9486fd819775a1d1704201f5638f6ca2aab8d8ae7f4270a8b7e621d71ee9e599
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / etiket_api-0.3.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl

Download URL etiket_api-0.3.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Size 3.5 MB
Tags CPython 3.11 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
611740720ac1ca3f28a1dcd41287969fbbb481bc7241c9d8779085887b1b8882
BLAKE2b-256 checksum
How to use checksums
ca30f8720fe4a20a1ba8421ba0c785c4aa502ee3afcdc6befebf668fc4c819df
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / etiket_api-0.3.0-cp311-cp311-macosx_11_0_x86_64.whl

Download URL etiket_api-0.3.0-cp311-cp311-macosx_11_0_x86_64.whl
Size 607.4 kB
Tags CPython 3.11 macOS 11.0+ x86-64
SHA-256 checksum
How to use checksums
fabf87ae4c549517148e2ff19a948bb856a2fd45e75532a1925c3a87b5110a39
BLAKE2b-256 checksum
How to use checksums
c5bcd48d87f8d127177fec6c81429f8ec6f3c476f8647640d25bc1a2500e15d6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / etiket_api-0.3.0-cp311-cp311-macosx_11_0_arm64.whl

Download URL etiket_api-0.3.0-cp311-cp311-macosx_11_0_arm64.whl
Size 549.9 kB
Tags CPython 3.11 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
a0153fe61848b141d4d58e66fd7e2d5e438e7f24119247051394dfdfd6b768a3
BLAKE2b-256 checksum
How to use checksums
06563e2a960a1033686e004a2301a3a43cb2e5de08daf61bc324f988d92f2119
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / etiket_api-0.3.0-cp310-cp310-win_amd64.whl

Download URL etiket_api-0.3.0-cp310-cp310-win_amd64.whl
Size 537.4 kB
Tags CPython 3.10 Windows x86-64
SHA-256 checksum
How to use checksums
1d5af07a11c62a822c5483974ea4fa3182a3756230f980c3365e6b4b607e250f
BLAKE2b-256 checksum
How to use checksums
37b25101084033017b49b33a5c99cc95f84d60d96beb74c070ef63ce3833feec
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / etiket_api-0.3.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl

Download URL etiket_api-0.3.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Size 3.4 MB
Tags CPython 3.10 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
c216e0b092b2f6b784228a028c9773ed0c3bee95349a2cc199df0c05e8bc5cd4
BLAKE2b-256 checksum
How to use checksums
43029d6dcc10fa140ac1c19583243ee0e80668d7fc9e75e91b4e58ae58244e51
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / etiket_api-0.3.0-cp310-cp310-macosx_11_0_x86_64.whl

Download URL etiket_api-0.3.0-cp310-cp310-macosx_11_0_x86_64.whl
Size 619.9 kB
Tags CPython 3.10 macOS 11.0+ x86-64
SHA-256 checksum
How to use checksums
c2456b4a4a12e4944245d45a14c6ce52547663bef07c12f48700c0188f3f9496
BLAKE2b-256 checksum
How to use checksums
9bdb6e3ab10cf6605583a8079fc305abed7a0987b356bd54b8b0e7377cb05c76
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / etiket_api-0.3.0-cp310-cp310-macosx_11_0_arm64.whl

Download URL etiket_api-0.3.0-cp310-cp310-macosx_11_0_arm64.whl
Size 560.3 kB
Tags CPython 3.10 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
8b450c6933ab7f4abc8a6646f7349b8d1aa90b019834a206ecb8cc2c90272f59
BLAKE2b-256 checksum
How to use checksums
1cb95141f5acaf6c07e9a9e0ad0bc838e9e86dfbb95142d5bf66dff2f7986b40
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Security for etiket-api 0.3.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page