Sign in Get started

Result models

Every object the SDK returns, with its Pydantic definition and a link to the source. Generated from the shipped package, so it cannot drift.

View as Markdown

Every result the SDK returns, generated from pictograph 1.69.67. Definitions are collapsed - open one for its fields and a link to the source at v1.69.67.

What each call returns

Call Returns
client.annotation_comments.create() AnnotationComment AnnotationComment
client.annotation_comments.delete() None
client.annotation_comments.list() Sequence[AnnotationComment] AnnotationComment
client.annotation_comments.resolve() AnnotationComment AnnotationComment
client.annotation_comments.update() AnnotationComment AnnotationComment
client.annotations.bulk_save() BulkSaveResult
client.annotations.delete() DeleteResult
client.annotations.delete_class() DeleteClassResult
client.annotations.get() list[Annotation]
client.annotations.import_coco() AnnotationImportReport AnnotationImportReport
client.annotations.import_pascal_voc() AnnotationImportReport AnnotationImportReport
client.annotations.import_yolo() AnnotationImportReport AnnotationImportReport
client.annotations.merge_class() MergeClassResult
client.annotations.rename_class() RenameClassResult
client.annotations.save() SaveResult
client.api_keys.create() CreatedApiKey CreatedApiKey
client.api_keys.delete() None
client.api_keys.get() ApiKey ApiKey
client.api_keys.list() list[ApiKey] ApiKey
client.api_keys.update() ApiKey ApiKey
client.auto_annotate.batch() BatchJob BatchJob
client.auto_annotate.box() PromptResult PromptResult
client.auto_annotate.cancel_batch() BatchJob BatchJob
client.auto_annotate.dataset() AnnotateReport AnnotateReport
client.auto_annotate.get_batch() BatchJob BatchJob
client.auto_annotate.point() PromptResult PromptResult
client.auto_annotate.quote() BatchQuote BatchQuote
client.auto_annotate.text() PromptResult PromptResult
client.auto_annotate.wait_for_batch() BatchJob BatchJob
client.batch.copy() BatchResult BatchResult
client.batch.delete() BatchResult BatchResult
client.batch.move() BatchResult BatchResult
client.batch.update() BatchResult BatchResult
client.connectors.cancel_import() ImportJob ImportJob
client.connectors.check_limits() LimitCheckResult LimitCheckResult
client.connectors.get_import() ImportJob ImportJob
client.connectors.import_() ImportJob ImportJob
client.connectors.validate() ValidationResult ValidationResult
client.connectors.wait_for_import() ImportJob ImportJob
client.credits.balance() CreditBalance CreditBalance
client.credits.estimate() CreditEstimate CreditEstimate
client.credits.history() list[CreditLedgerEntry]
client.credits.iter() OffsetPager[CreditLedgerEntry]
client.credits.usage_by_operation() UsageByOperation
client.datasets.archive() Dataset Dataset
client.datasets.as_pytorch() PictographTorchDataset
client.datasets.create() Dataset Dataset
client.datasets.delete() dict[str, Any]
client.datasets.download() DownloadReport
client.datasets.freeze() DatasetStorageTransition DatasetStorageTransition
client.datasets.get() Dataset Dataset
client.datasets.insights() DatasetInsights DatasetInsights
client.datasets.iter() OffsetPager[Dataset] Dataset
client.datasets.list() list[Dataset] Dataset
client.datasets.near_duplicates() NearDuplicatesResult NearDuplicatesResult
client.datasets.restore() DatasetStorageTransition DatasetStorageTransition
client.datasets.storage_status() DatasetStorageStatus DatasetStorageStatus
client.datasets.unarchive() Dataset Dataset
client.datasets.update() Dataset Dataset
client.datasets.wait_for_storage() DatasetStorageStatus DatasetStorageStatus
client.deployments.bulk_delete() BulkDeleteResult BulkDeleteResult
client.deployments.bulk_pause() BulkActionResult BulkActionResult
client.deployments.bulk_resume() BulkActionResult BulkActionResult
client.deployments.compute_options() Sequence[DeploymentComputeOption]
client.deployments.connect() DeploymentClient[Any]
client.deployments.create() CreatedDeployment CreatedDeployment
client.deployments.delete() None
client.deployments.get() Deployment Deployment
client.deployments.iter() OffsetPager[Deployment] Deployment
client.deployments.list() list[Deployment] Deployment
client.deployments.pause() Deployment Deployment
client.deployments.quote() DeploymentQuote DeploymentQuote
client.deployments.resume() Deployment Deployment
client.directories.create() Directory Directory
client.directories.delete() None
client.directories.list() Sequence[Directory] Directory
client.directories.rename() Directory Directory
client.directories.stats() DirectoryStats DirectoryStats
client.directories.tree() Sequence[DirectoryTreeNode]
client.exports.bulk_delete() BulkDeleteResult BulkDeleteResult
client.exports.create() Export Export
client.exports.delete() None
client.exports.download() Path
client.exports.download_by_id() Path
client.exports.get() Export Export
client.exports.get_by_id() Export Export
client.exports.iter() OffsetPager[Export] Export
client.exports.list() list[Export] Export
client.exports.wait_for_completion() Export Export
client.images.assign_splits() dict[str, int]
client.images.augment() AugmentReport AugmentReport
client.images.bulk_tag() int
client.images.bulk_upload() BulkUploadResult
client.images.delete() None
client.images.download() Path
client.images.download_bundle() Path
client.images.get() Image Image
client.images.iter() OffsetPager[Image] Image
client.images.list() list[Image] Image
client.images.review() ImageStatus
client.images.set_split() ImageSplit
client.images.tile() TileReport TileReport
client.images.upload() Image Image
client.images.upload_from_directory() UploadReport UploadReport
client.model_evaluations.cancel() ModelEvaluation ModelEvaluation
client.model_evaluations.create() ModelEvaluation ModelEvaluation
client.model_evaluations.evaluate() ModelEvaluation ModelEvaluation
client.model_evaluations.get() ModelEvaluation ModelEvaluation
client.model_evaluations.iter() OffsetPager[ModelEvaluation] ModelEvaluation
client.model_evaluations.list() list[ModelEvaluation] ModelEvaluation
client.model_evaluations.wait_for_completion() ModelEvaluation ModelEvaluation
client.models.bulk_delete() BulkDeleteResult BulkDeleteResult
client.models.delete() None
client.models.download() Path
client.models.download_file() Path
client.models.files() ModelFileManifest ModelFileManifest
client.models.fork() Model Model
client.models.get() Model Model
client.models.get_by_name() Model Model
client.models.iter() OffsetPager[Model] Model
client.models.list() list[Model] Model
client.models.load() AnyModel
client.models.predict() ModelPredictResult ModelPredictResult
client.models.set_current_version() ModelVersionsPayload ModelVersionsPayload
client.models.update() Model Model
client.models.versions() ModelVersionsPayload ModelVersionsPayload
client.notifications.delete() None
client.notifications.list() list[Notification]
client.notifications.mark_all_read() int
client.notifications.mark_read() None
client.notifications.unread_count() int
client.organizations.invite() OrganizationInvite OrganizationInvite
client.organizations.list_invites() list[OrganizationInvite] OrganizationInvite
client.organizations.list_members() list[OrganizationMember]
client.organizations.me() Organization Organization
client.organizations.remove_member() None
client.organizations.revoke_invite() None
client.organizations.update() Organization Organization
client.organizations.update_member_role() dict[str, Any]
client.search.by_similarity() list[SimilarImage]
client.search.by_tag() list[TaggedImage]
client.tasks.contributions() TaskContributions TaskContributions
client.tasks.iter() OffsetPager[Task]
client.tasks.list() list[Task]
client.training.bulk_cancel() BulkActionResult BulkActionResult
client.training.cancel() TrainingRun TrainingRun
client.training.create() TrainingRun TrainingRun
client.training.get() TrainingRun TrainingRun
client.training.iter() OffsetPager[TrainingRun] TrainingRun
client.training.list() list[TrainingRun] TrainingRun
client.training.wait_for_completion() TrainingRun TrainingRun
client.video.extract_frames() VideoExtractionJob VideoExtractionJob
client.video.get_extraction() VideoExtractionJob VideoExtractionJob
client.video.probe() VideoMetadata VideoMetadata
client.video.upload() VideoUploadInfo VideoUploadInfo
client.video.wait_for_extraction() VideoExtractionJob VideoExtractionJob
client.webhooks.create() CreatedWebhookEndpoint CreatedWebhookEndpoint
client.webhooks.delete() None
client.webhooks.deliveries() Sequence[WebhookDelivery]
client.webhooks.event_types() list[str]
client.webhooks.get() WebhookEndpoint WebhookEndpoint
client.webhooks.list() Sequence[WebhookEndpoint] WebhookEndpoint
client.webhooks.replay() None
client.webhooks.rotate_secret() CreatedWebhookEndpoint CreatedWebhookEndpoint
client.webhooks.test() dict[str, Any]
client.webhooks.update() WebhookEndpoint WebhookEndpoint
client.workflows.bulk_cancel_runs() BulkActionResult BulkActionResult
client.workflows.bulk_delete() BulkDeleteResult BulkDeleteResult
client.workflows.cancel_run() None
client.workflows.create() Workflow Workflow
client.workflows.delete() None
client.workflows.get() Workflow Workflow
client.workflows.get_run() WorkflowRun WorkflowRun
client.workflows.list() Sequence[Workflow] Workflow
client.workflows.run() WorkflowRunCreated WorkflowRunCreated
client.workflows.update() Workflow Workflow
client.workflows.wait_for_run() WorkflowRun WorkflowRun

Models

AnnotateReport · 8 fields · Outcome of an AutoAnnotate.dataset call.
class AnnotateReport(BaseModel):
    dataset_name: str
    images_attempted: int = 0
    images_processed: int = 0
    images_skipped: int = 0
    images_capped: int = 0
    annotations_added: int = 0
    failures: list[AnnotationFailure] = []
    job_id: str | None = None

Source

AnnotationComment · 11 fields · One comment on an annotation.
class AnnotationComment(BaseModel):
    id: str
    annotation_id: str
    body: str
    resolved: bool = False
    created_at: datetime | None = None
    updated_at: datetime | None = None
    user_id: str | None = None
    author_name: str | None = None
    author_username: str | None = None
    author_avatar_url: str | None = None
    is_mine: bool = False

Source

AnnotationImportReport · 6 fields · Outcome of an Annotations.import_coco / `import_pascal_voc` / `import_yolo` call.
class AnnotationImportReport(BaseModel):
    dataset_name: str
    images_matched: int = 0
    images_saved: int = 0
    annotations_saved: int = 0
    unmatched_files: list[str] = []
    failures: list[AnnotationImportFailure] = []

Source

ApiKey · 10 fields · API key metadata returned by list/get/update endpoints.
class ApiKey(BaseModel):
    id: str
    organization_id: str
    name: str
    key_prefix: str
    role: Literal['viewer', 'member', 'admin', 'owner']
    rate_limit: int
    is_active: bool
    last_used_at: datetime | None = None
    expires_at: datetime | None = None
    created_at: datetime

Source

AugmentReport · 8 fields · Outcome of an Images.augment run.
class AugmentReport(BaseModel):
    source: str
    target: str
    source_images: int = 0
    originals_copied: int = 0
    variants_created: int = 0
    annotations_written: int = 0
    skipped_empty: int = 0
    failures: list[AugmentFailure] = []

Source

BatchJob · 10 fields · Snapshot of an auto-annotate batch job's progress.
class BatchJob(BaseModel):
    job_id: str
    status: Literal['pending', 'running', 'completed', 'failed', 'cancelled']
    progress: int = 0
    total_images: int = 0
    processed_images: int = 0
    total_annotations_added: int = 0
    failed_images: int = 0
    error_message: str | None = None
    estimated_credits: int | None = None
    completed_at: datetime | None = None

Source

BatchQuote · 8 fields · What a batch job WOULD cost - the same deposit `batch()` would take.
class BatchQuote(BaseModel):
    total_images: int
    estimated_credits: int
    sahi_tiles: int = 0
    containers: int = 0
    remaining_credits: int = 0
    sufficient: bool = True
    max_images: int = 5000
    exceeds_max_images: bool = False

Source

BatchResult · 6 fields · Outcome of a batch operation.
class BatchResult(BaseModel):
    success: bool
    processed: int
    failed: list[BatchFailure] = []
    affected_directories: list[str] = []
    renamed: int = 0
    operation: str | None = None

Source

BulkActionResult · 3 fields · Result of a server-side bulk state-change (e.g. pause/resume).
class BulkActionResult(BaseModel):
    succeeded: list[str] = []
    not_found: list[str] = []
    count: int = 0

Source

BulkDeleteResult · 3 fields · Result of a server-side bulk delete (one chunked, org-scoped call).
class BulkDeleteResult(BaseModel):
    succeeded: list[str] = []
    not_found: list[str] = []
    count: int = 0

Source

CreatedApiKey · 8 fields · Response from ApiKeys.create - includes the secret one time only.
class CreatedApiKey(BaseModel):
    api_key: str
    key_id: str
    key_prefix: str
    name: str
    role: Literal['viewer', 'member', 'admin', 'owner']
    rate_limit: int
    expires_at: datetime | None = None
    created_at: datetime

Source

CreatedDeployment · 2 fields · Create response - carries the one-time plaintext bearer token.
class CreatedDeployment(BaseModel):
    deployment: Deployment
    auth_token: str

Source

CreatedWebhookEndpoint · 2 fields · Create / rotate response - carries the one-time signing secret.
class CreatedWebhookEndpoint(BaseModel):
    endpoint: WebhookEndpoint
    secret: str

Source

CreditBalance · 11 fields · Current compute-credit state for an organization (USD, stored as µUSD).
class CreditBalance(BaseModel):
    included_allowance_micro_usd: int = 0
    included_remaining_micro_usd: int = 0
    budget_micro_usd: int = 0
    period_spend_micro_usd: int = 0
    period_overage_micro_usd: int = 0
    budget_remaining_micro_usd: int = 0
    period_start: datetime | None = None
    credits_reset_at: datetime | None = None
    credits_remaining: int = 0
    credits_monthly_allowance: int = 0
    recent_history: list[CreditLedgerEntry] = []

Source

CreditEstimate · 11 fields · Estimated cost of a planned operation (USD, stored as µUSD), plus an affordability check.
class CreditEstimate(BaseModel):
    operation: str
    unit: str
    quantity: int
    micro_usd_per_unit: int = 0
    total_micro_usd: int = 0
    remaining_micro_usd: int = 0
    sufficient: bool = False
    credits_per_unit: int = 0
    total_credits: int = 0
    minimum: int = 0
    credits_remaining: int = 0

Source

Dataset · 17 fields · A Pictograph dataset - a group of images sharing an annotation config.
class Dataset(BaseModel):
    id: str
    organization_id: str | None = None
    name: str
    description: str | None = None
    annotation_types: list[str] = ['bbox']
    classes: list[DatasetClass] = []
    image_count: int = 0
    completed_image_count: int = 0
    archived_image_count: int = 0
    total_size: int = 0
    is_public: bool = False
    is_archived: bool = False
    archived_at: datetime | None = None
    storage_class: str = 'standard'
    images: list[Image] | None = None
    created_at: datetime
    updated_at: datetime | None = None

Source

DatasetInsights · 13 fields · Dataset Health / Insights - headline totals, class balance, and more.
class DatasetInsights(BaseModel):
    total_images: int = 0
    total_annotations: int = 0
    annotated_images: int = 0
    unannotated_images: int = 0
    avg_annotations_per_image: float = 0.0
    total_bytes: int = 0
    status_counts: InsightsStatusCounts = InsightsStatusCounts(new=0, annotate=0, review=0, complete=0)
    class_annotation_counts: dict[str, int] = {}
    class_image_counts: dict[str, int] = {}
    type_counts: dict[str, int] = {}
    annotation_density: dict[str, int] = {}
    dimensions: InsightsDimensions = InsightsDimensions(min_width=None, max_width=None, avg_width=None, min_height=None, max_height=None, avg_height=None, orientation=InsightsOrientation(landscape=0, portrait=0, square=0), sizes=[], distinct_size_count=0, images_with_dimensions=0, images_missing_dimensions=0)
    model_confidence: ModelConfidence | None = None

Source

DatasetStorageStatus · 7 fields · Cold-storage state of a dataset (`GET /developer/datasets/{id}/storage`).
class DatasetStorageStatus(BaseModel):
    storage_class: str = 'standard'
    storage_state: str = 'idle'
    cold_since: datetime | None = None
    cold_bytes: int = 0
    cold_image_count: int = 0
    storage_job_id: str | None = None
    restore_estimate: DatasetRestoreEstimate | None = None

Source

DatasetStorageTransition · 3 fields · Acknowledgement that a freeze/restore background job started.
class DatasetStorageTransition(BaseModel):
    job_id: str
    storage_state: str
    quoted_micro_usd: int | None = None

Source

Deployment · 19 fields · A live (or provisioning) model inference deployment.
class Deployment(BaseModel):
    id: str
    organization_id: str
    model_id: str
    name: str
    status: Literal['provisioning', 'active', 'paused', 'failed', 'terminated']
    compute_type: Literal['cpu', 'gpu']
    gpu_type: Optional[Literal['t4', 'l4', 'a10g', 'a100']] = None
    min_containers: int
    max_containers: int
    scaledown_window: int
    endpoint_url: str | None = None
    auth_token_prefix: str | None = None
    inference_config: dict[str, Any] = {}
    cost_rate_per_min: int = 0
    cost_per_hour: int | None = None
    accrued_cost_credits: int = 0
    uptime_seconds: int = 0
    created_at: datetime | None = None
    started_at: datetime | None = None

Source

DeploymentQuote · 5 fields · Cost quote for a deployment, before creating it. All amounts are already-marked-up micro-USD (1 USD = 1_000_000 µUSD).
class DeploymentQuote(BaseModel):
    rate_per_min_micro_usd: int
    cost_per_hour_micro_usd: int
    cost_per_day_micro_usd: int
    scale_to_zero: bool
    billing_note: str

Source

Directory · 10 fields · A single virtual directory in a dataset.
class Directory(BaseModel):
    id: str
    dataset_id: str
    organization_id: str | None = None
    name: str
    parent_directory_id: str | None = None
    full_path: str
    image_count: int = 0
    created_by: str | None = None
    created_at: datetime | None = None
    updated_at: datetime | None = None

Source

DirectoryStats · 4 fields · Aggregate image statistics for a directory (and, by default, its subdirectories).
class DirectoryStats(BaseModel):
    total_directories: int
    total_images: int
    total_size_bytes: int
    directories_by_status: dict[str, int] = {}

Source

Export · 17 fields · A dataset export - produced asynchronously, downloaded as a ZIP.
class Export(BaseModel):
    id: str
    dataset_id: str
    dataset_name: str
    name: str
    format: Literal['pictograph', 'darwin', 'coco', 'yolo', 'yolo_obb', 'yolo_pose', 'dota', 'pascal_voc', 'cvat', 'datumaro', 'labelme', 'csv']
    include_images: bool = False
    class_filter: list[str] | None = None
    status_filter: str | None = None
    status: Literal['pending', 'processing', 'completed', 'failed']
    error_message: str | None = None
    file_size: int | None = None
    image_count: int | None = None
    annotation_count: int | None = None
    created_at: datetime
    expires_at: datetime | None = None
    download_url: str | None = None
    organization_id: str | None = None

Source

Image · 18 fields · An image within a Pictograph dataset.
class Image(BaseModel):
    id: str
    dataset_id: str | None = None
    filename: str
    status: Literal['new', 'annotate', 'review', 'complete'] = 'new'
    split: Optional[Literal['train', 'val', 'test']] = None
    annotation_count: int = 0
    min_confidence: float | None = None
    file_size: int = 0
    width: int | None = None
    height: int | None = None
    content_type: str | None = None
    directory_path: str | None = None
    tags: list[str] = []
    is_archived: bool = False
    image_url: str | None = None
    thumbnail_url: str | None = None
    annotation_url: str | None = None
    created_at: datetime

Source

ImportJob · 8 fields · Snapshot of an import operation - totals + per-dataset breakdown.
class ImportJob(BaseModel):
    import_id: str
    status: Literal['processing', 'completed', 'error', 'cancelled']
    progress: float = 0.0
    total_images: int = 0
    imported_images: int = 0
    failed_images: int = 0
    current_dataset: str = ''
    datasets: list[DatasetImportProgress] = []

Source

LimitCheckResult · 8 fields · Outcome of Connectors.check_limits.
class LimitCheckResult(BaseModel):
    allowed: bool
    current_images: int
    image_limit: int
    images_after_import: int
    current_storage_bytes: int
    storage_limit_bytes: int
    storage_after_import_bytes: int
    exceeded: Optional[Literal['images', 'storage', 'both']] = None

Source

Model · 17 fields · A trained computer vision model.
class Model(BaseModel):
    id: str
    organization_id: str
    name: str
    description: str | None = None
    model_type: Literal['object_detection', 'semantic_segmentation', 'instance_segmentation', 'classification', 'keypoint_detection']
    architecture: str | None = None
    visibility: Literal['private', 'public']
    status: Literal['training', 'ready', 'failed', 'archived']
    metrics: dict[str, Any] | None = None
    class_mapping: dict[str, Any] | None = None
    training_config: dict[str, Any] | None = None
    version: str = '1.0.0'
    parent_model_id: str | None = None
    forked_from_model_id: str | None = None
    precision: Literal['fp32', 'fp16'] = 'fp32'
    created_at: datetime
    updated_at: datetime

Source

ModelEvaluation · 22 fields · A model-evaluation run + its metric summary.
class ModelEvaluation(BaseModel):
    id: str
    organization_id: str
    model_id: str
    dataset_id: str
    export_id: str | None = None
    status: Literal['pending', 'running', 'completed', 'failed', 'cancelled']
    progress: int = 0
    iou_threshold: float = 0.5
    confidence_threshold: float = 0.5
    total_images: int = 0
    evaluated_images: int = 0
    failed_images: int = 0
    overall_metrics: EvalOverallMetrics | None = None
    per_class_metrics: list[EvalClassMetrics] | None = None
    confusion_matrix: EvalConfusionMatrix | None = None
    worst_images: list[EvalWorstImage] | None = None
    config: dict[str, Any] | None = None
    error_message: str | None = None
    created_at: datetime | None = None
    updated_at: datetime | None = None
    started_at: datetime | None = None
    completed_at: datetime | None = None

Source

ModelFileManifest · 3 fields · A model's complete version + file manifest (`models.files`).
class ModelFileManifest(BaseModel):
    versions: list[ModelVersionEntry] = []
    files: list[ModelFileEntry] = []
    pinned_version_id: str | None = None

Source

ModelPredictResult · 6 fields · Result of a remote single-image test inference (`models.predict`).
class ModelPredictResult(BaseModel):
    success: bool = True
    annotations: list[dict[str, Any]] = []
    tags: list[str] = []
    tag_scores: list[float] = []
    model_type: Optional[Literal['object_detection', 'semantic_segmentation', 'instance_segmentation', 'classification', 'keypoint_detection']] = None
    inference_seconds: float = 0.0

Source

ModelVersionsPayload · 4 fields · `models.versions` - the version list plus promote state.
class ModelVersionsPayload(BaseModel):
    versions: list[ModelVersionEntry] = []
    current_version_id: str | None = None
    pinned_version_id: str | None = None
    latest_version_id: str | None = None

Source

NearDuplicatesResult · 11 fields · Near-duplicate clusters for a dataset + headline data-curation counts.
class NearDuplicatesResult(BaseModel):
    groups: list[DuplicateGroup] = []
    group_count: int = 0
    duplicate_image_count: int = 0
    redundant_count: int = 0
    analyzed: int = 0
    total_images: int = 0
    sample_limit: int = 0
    sample_capped: bool = False
    pairs_capped: bool = False
    threshold: float = 0.0
    directory_path: str | None = None

Source

Organization · 16 fields · Organization metadata + tier limits + credit balance.
class Organization(BaseModel):
    id: str
    name: str
    slug: str
    description: str | None = None
    is_public: bool | None = None
    subscription_tier: Literal['free', 'core', 'pro', 'team', 'enterprise']
    credits_remaining: int
    credits_monthly_allowance: int
    credits_reset_at: datetime | None = None
    max_users: int
    max_images: int
    max_storage_bytes: int
    member_count: int
    pending_invite_count: int
    created_at: datetime
    updated_at: datetime

Source

OrganizationInvite · 8 fields · A pending / accepted / expired / revoked invite.
class OrganizationInvite(BaseModel):
    id: str
    organization_id: str
    email: str
    role: Literal['admin', 'member', 'viewer']
    status: Literal['pending', 'accepted', 'expired', 'revoked']
    invited_by: str | None = None
    expires_at: datetime
    created_at: datetime

Source

PromptResult · 4 fields · Outcome of a single SAM3 prompt (point / box / text).
class PromptResult(BaseModel):
    status: Literal['success', 'no_detection', 'below_threshold']
    annotations: list[Annotation] = []
    score: float | None = None
    inference_time: float | None = None

Source

TaskContributions · 6 fields · Per-annotator contribution breakdown for a task, with rollup totals.
class TaskContributions(BaseModel):
    task_id: str
    contributors: list[TaskContribution]
    contributor_count: int
    total_images: int
    images_complete: int
    total_active_seconds: int

Source

TileReport · 7 fields · Outcome of an Images.tile run.
class TileReport(BaseModel):
    source: str
    target: str
    source_images: int = 0
    tiles_created: int = 0
    empty_tiles: int = 0
    annotations_written: int = 0
    failures: list[TileFailure] = []

Source

TrainingRun · 21 fields · A single training job.
class TrainingRun(BaseModel):
    id: str
    organization_id: str
    name: str
    dataset_id: str | None = None
    export_id: str | None = None
    model_id: str | None = None
    pipeline_type: Literal['yolox', 'sm_pytorch', 'classification', 'rfdetr_detection', 'rfdetr_segmentation', 'rfdetr_keypoint']
    gpu_type: Optional[Literal['a10g', 'a100', 'h100', 'auto']] = None
    status: Literal['pending', 'queued', 'running', 'completed', 'failed', 'cancelled']
    progress: int = 0
    current_epoch: int = 0
    total_epochs: int | None = None
    metrics: dict[str, Any] = {}
    config: dict[str, Any] = {}
    eta_seconds: int | None = None
    training_time_seconds: int | None = None
    error_message: str | None = None
    started_at: datetime | None = None
    completed_at: datetime | None = None
    created_at: datetime
    created_by: str | None = None

Source

UploadReport · 5 fields · Outcome of an Images.upload_from_directory call.
class UploadReport(BaseModel):
    dataset_name: str
    images_attempted: int = 0
    images_uploaded: int = 0
    images_skipped: int = 0
    failures: list[UploadFailure] = []

Source

ValidationResult · 4 fields · Outcome of Connectors.validate.
class ValidationResult(BaseModel):
    valid: bool
    workspace: str = ''
    datasets: list[RemoteDataset] = []
    error: str | None = None

Source

VideoExtractionJob · 9 fields · Snapshot of a frame-extraction job.
class VideoExtractionJob(BaseModel):
    job_id: str
    status: Literal['processing', 'complete', 'failed']
    progress: int = 0
    frames_extracted: int = 0
    total_frames: int = 0
    error: str | None = None
    directory_path: str | None = None
    warning: str | None = None
    image_ids: list[str] | None = None

Source

VideoMetadata · 5 fields · Probe result for an uploaded video.
class VideoMetadata(BaseModel):
    duration_seconds: float
    native_fps: float
    width: int
    height: int
    frame_count: int

Source

VideoUploadInfo · 3 fields · Signed URL + temporary storage path returned by `upload-url`.
class VideoUploadInfo(BaseModel):
    upload_url: str
    gcs_path: str
    gcs_uri: str

Source

WebhookEndpoint · 13 fields · A registered outbound webhook destination.
class WebhookEndpoint(BaseModel):
    id: str
    organization_id: str
    url: str
    description: str | None = None
    event_types: list[str] = []
    enabled: bool = True
    secret_version: int = 1
    secret_prefix: str | None = None
    consecutive_failures: int = 0
    disabled_reason: str | None = None
    auth_header_names: list[str] | None = None
    last_delivery_at: datetime | None = None
    created_at: datetime | None = None

Source

Workflow · 10 fields · A saved node-graph workflow.
class Workflow(BaseModel):
    id: str
    organization_id: str
    name: str
    description: str | None = None
    graph: dict[str, Any] = {}
    template_key: str | None = None
    status: Literal['draft', 'ready', 'archived'] = 'draft'
    last_run_id: str | None = None
    created_at: datetime | None = None
    updated_at: datetime | None = None

Source

WorkflowRun · 16 fields · One execution of a workflow over a source.
class WorkflowRun(BaseModel):
    id: str
    organization_id: str
    workflow_id: str
    status: Literal['queued', 'processing', 'completed', 'error', 'cancelled']
    progress: float = 0.0
    frames_total: int | None = None
    frames_done: int = 0
    sample_fps: float | None = None
    step_results: dict[str, Any] = {}
    artifacts: list[dict[str, Any]] = []
    warnings: list[str] = []
    deposit_micro_usd: int = 0
    final_micro_usd: int | None = None
    error: str | None = None
    created_at: datetime | None = None
    completed_at: datetime | None = None

Source

WorkflowRunCreated · 2 fields · Run response - the new run id + `deposit_micro_usd`, which is the un-charged pre-run ESTIMATE. Workflows bill ONCE, on success, from measured GPU time; a failed or cancelled run is free. The field name is kept for wire-compat.
class WorkflowRunCreated(BaseModel):
    run_id: str
    deposit_micro_usd: int = 0

Source

Copied to clipboard