Skip to main content
Auto-generated from SDK source. Last updated: February 2026.

Client

Avala

Main client class. Default export of @avala-ai/sdk.
import Avala from "@avala-ai/sdk";

const avala = new Avala({
  apiKey: "avk_...",      // or set AVALA_API_KEY env var
  baseUrl: "https://api.avala.ai/api/v1",  // default
  timeout: 30_000,        // ms
});
ParameterTypeDefaultDescription
apiKeystring?AVALA_API_KEY env varYour Avala API key.
baseUrlstring?https://api.avala.ai/api/v1API base URL.
timeoutnumber?30000Request timeout in milliseconds.
Resources:
PropertyTypeDescription
avala.datasetsDatasetsResourceDataset operations
avala.projectsProjectsResourceProject operations (read-only)
avala.exportsExportsResourceExport operations
avala.tasksTasksResourceTask operations (read-only)
avala.storageConfigsStorageConfigsResourceCloud storage operations
avala.agentsAgentsResourceAutomation agent operations
avala.inferenceProvidersInferenceProvidersResourceInference provider operations
avala.autoLabelJobsAutoLabelJobsResourceAuto-labeling job operations
avala.qualityTargetsQualityTargetsResourceQuality target operations (project-scoped)
avala.consensusConsensusResourceConsensus scoring operations (project-scoped)
avala.webhooksWebhooksResourceWebhook subscription operations
avala.webhookDeliveriesWebhookDeliveriesResourceWebhook delivery log operations (read-only)
avala.organizationsOrganizationsResourceOrganization management
avala.slicesSlicesResourceSlice operations
Methods:
MethodReturnsDescription
avala.rateLimitInfoRateLimitInfoRate limit headers from last response

Resources

datasets

avala.datasets.create()

Create a new dataset.
const dataset = await avala.datasets.create({
  name: "LiDAR Captures Q1",
  slug: "lidar-captures-q1",
  dataType: "lidar",
  isSequence: true,
  visibility: "private",
  providerConfig: {
    provider: "aws_s3",
    s3_bucket_name: "my-datasets",
    s3_bucket_region: "us-east-1",
    s3_bucket_prefix: "captures/q1/",
    s3_access_key_id: "AKIA...",
    s3_secret_access_key: "your-secret-key",
  },
  ownerName: "my-org",
});
ParameterTypeDefaultDescription
namestringDisplay name for the dataset.
slugstringURL-friendly identifier.
dataTypestringData type: image, video, lidar, or mcap.
isSequenceboolean?falseWhether the dataset contains sequences.
visibilitystring?"private""private" or "public".
createMetadataboolean?trueWhether to create dataset metadata.
providerConfigRecord<string, unknown>?undefinedCloud storage provider configuration.
ownerNamestring?undefinedDataset owner username or email.
Returns: Promise<Dataset>

avala.datasets.list()

List datasets with optional filtering and cursor-based pagination.
const page = await avala.datasets.list({ dataType: "image", name: "highway", limit: 20 });
ParameterTypeDefaultDescription
dataTypestring?undefinedFilter by data type: image, video, lidar, mcap, or splat.
namestring?undefinedFilter by name (case-insensitive substring match).
statusstring?undefinedFilter by status: creating or created.
visibilitystring?undefinedFilter by visibility: private or public.
limitnumber?undefinedMaximum results per page.
cursorstring?undefinedPagination cursor from a previous response.
Returns: Promise<CursorPage<Dataset>>

avala.datasets.get()

Get a single dataset by UID.
const dataset = await avala.datasets.get("550e8400-e29b-41d4-a716-446655440000");
ParameterTypeDescription
uidstringDataset unique identifier.
Returns: Promise<Dataset>

avala.datasets.listItems()

List items in a dataset. Uses the owner/slug path.
const page = await avala.datasets.listItems("my-org", "my-dataset", { limit: 50 });
ParameterTypeDefaultDescription
ownerstringDataset owner (organization slug).
slugstringDataset slug.
limitnumber?undefinedMaximum results per page.
cursorstring?undefinedPagination cursor.
Returns: Promise<CursorPage<DatasetItem>>

avala.datasets.getItem()

Get a single item within a dataset.
const item = await avala.datasets.getItem("my-org", "my-dataset", "item_uid");
ParameterTypeDescription
ownerstringDataset owner (organization slug).
slugstringDataset slug.
itemUidstringItem unique identifier.
Returns: Promise<DatasetItem>

avala.datasets.listSequences()

List sequences in a dataset.
const page = await avala.datasets.listSequences("my-org", "my-dataset", { limit: 50 });
ParameterTypeDefaultDescription
ownerstringDataset owner (organization slug).
slugstringDataset slug.
limitnumber?undefinedMaximum results per page.
cursorstring?undefinedPagination cursor.
Returns: Promise<CursorPage<DatasetSequence>>

avala.datasets.getSequence()

Get a single sequence within a dataset.
const seq = await avala.datasets.getSequence("my-org", "my-dataset", "sequence_uid");
ParameterTypeDescription
ownerstringDataset owner (organization slug).
slugstringDataset slug.
sequenceUidstringSequence unique identifier.
Returns: Promise<DatasetSequence>

projects

avala.projects.list()

List projects with cursor-based pagination.
const page = await avala.projects.list({ limit: 20 });
ParameterTypeDefaultDescription
limitnumber?undefinedMaximum results per page.
cursorstring?undefinedPagination cursor.
Returns: Promise<CursorPage<Project>>

avala.projects.get()

Get a single project by UID.
const project = await avala.projects.get("770a9600-a40d-63f6-c938-668877660000");
ParameterTypeDescription
uidstringProject unique identifier.
Returns: Promise<Project>

tasks

avala.tasks.list()

List tasks with optional filtering and cursor-based pagination.
const page = await avala.tasks.list({
  project: "proj_uid",
  status: "pending",
  limit: 50,
});
ParameterTypeDefaultDescription
projectstring?undefinedFilter by project UID.
statusstring?undefinedFilter by task status.
limitnumber?undefinedMaximum results per page.
cursorstring?undefinedPagination cursor.
Returns: Promise<CursorPage<Task>>

avala.tasks.get()

Get a single task by UID.
const task = await avala.tasks.get("990c1800-b62f-85a8-e150-880099880000");
ParameterTypeDescription
uidstringTask unique identifier.
Returns: Promise<Task>

exports

avala.exports.list()

List exports with cursor-based pagination.
const page = await avala.exports.list({ limit: 10 });
ParameterTypeDefaultDescription
limitnumber?undefinedMaximum results per page.
cursorstring?undefinedPagination cursor.
Returns: Promise<CursorPage<Export>>

avala.exports.create()

Create a new export. Provide either project or dataset.
const exportJob = await avala.exports.create({ project: "proj_uid" });
ParameterTypeDefaultDescription
projectstring?undefinedProject UID to export.
datasetstring?undefinedDataset UID to export.
Returns: Promise<Export>

avala.exports.get()

Get a single export by UID.
const exportJob = await avala.exports.get("export_uid");
ParameterTypeDescription
uidstringExport unique identifier.
Returns: Promise<Export>

storageConfigs

avala.storageConfigs.list()

List storage configurations.
const page = await avala.storageConfigs.list();
ParameterTypeDefaultDescription
limitnumber?undefinedMaximum results per page.
cursorstring?undefinedPagination cursor.
Returns: Promise<CursorPage<StorageConfig>>

avala.storageConfigs.create()

Create a new storage configuration.
const config = await avala.storageConfigs.create({
  name: "Production S3",
  provider: "aws_s3",
  s3BucketName: "my-bucket",
  s3BucketRegion: "us-west-2",
  s3AccessKeyId: process.env.AWS_ACCESS_KEY_ID!,
  s3SecretAccessKey: process.env.AWS_SECRET_ACCESS_KEY!,
});
ParameterTypeRequiredDescription
namestringYesConfiguration name.
providerstringYes"aws_s3" or "gc_storage".
s3BucketNamestring?NoS3 bucket name.
s3BucketRegionstring?NoS3 region.
s3BucketPrefixstring?NoS3 key prefix.
s3AccessKeyIdstring?NoAWS access key ID.
s3SecretAccessKeystring?NoAWS secret access key.
s3IsAcceleratedboolean?NoEnable S3 Transfer Acceleration.
gcStorageBucketNamestring?NoGCS bucket name.
gcStoragePrefixstring?NoGCS key prefix.
gcStorageAuthJsonContentstring?NoGCS service account JSON.
Returns: Promise<StorageConfig>

avala.storageConfigs.test()

Test a storage configuration.
const result = await avala.storageConfigs.test("config_uid");
// { verified: boolean, errors?: Record<string, string[]> }
Returns: Promise<{ verified: boolean; errors?: Record<string, string[]> }>

avala.storageConfigs.delete()

Delete a storage configuration.
await avala.storageConfigs.delete("config_uid");
Returns: Promise<void>

agents

avala.agents.list()

List automation agents.
const page = await avala.agents.list({ limit: 20 });
ParameterTypeDefaultDescription
limitnumber?undefinedMaximum results per page.
cursorstring?undefinedPagination cursor.
Returns: Promise<CursorPage<Agent>>

avala.agents.get()

Get a single agent by UID.
const agent = await avala.agents.get("agent_uid");
ParameterTypeDescription
uidstringAgent unique identifier.
Returns: Promise<Agent>

avala.agents.create()

Create a new automation agent.
const agent = await avala.agents.create({
  name: "QA Bot",
  events: ["task.completed"],
  callbackUrl: "https://example.com/webhook",
  taskTypes: ["annotation"],
});
ParameterTypeRequiredDescription
namestringYesAgent name.
eventsstring[]YesEvents the agent listens to.
descriptionstring?NoAgent description.
callbackUrlstring?NoURL called when events fire.
projectstring?NoScope to a specific project UID.
taskTypesstring[]?NoTask types the agent handles.
Returns: Promise<Agent>

avala.agents.update()

Update an existing agent.
const agent = await avala.agents.update("agent_uid", {
  isActive: false,
  callbackUrl: "https://example.com/new-webhook",
});
ParameterTypeRequiredDescription
uidstringYesAgent unique identifier.
namestring?NoAgent name.
descriptionstring?NoAgent description.
callbackUrlstring?NoCallback URL.
eventsstring[]?NoEvents to listen to.
isActiveboolean?NoEnable or disable the agent.
projectstring?NoProject UID scope.
taskTypesstring[]?NoTask types.
Returns: Promise<Agent>

avala.agents.delete()

Delete an agent.
await avala.agents.delete("agent_uid");
Returns: Promise<void>

avala.agents.listExecutions()

List execution history for an agent.
const page = await avala.agents.listExecutions("agent_uid", { limit: 50 });
ParameterTypeDefaultDescription
uidstringAgent unique identifier.
limitnumber?undefinedMaximum results per page.
cursorstring?undefinedPagination cursor.
Returns: Promise<CursorPage<AgentExecution>>

avala.agents.test()

Send a test event to an agent.
const result = await avala.agents.test("agent_uid");
// { success: boolean }
Returns: Promise<{ success: boolean }>

inferenceProviders

avala.inferenceProviders.list()

List inference providers.
const page = await avala.inferenceProviders.list();
ParameterTypeDefaultDescription
limitnumber?undefinedMaximum results per page.
cursorstring?undefinedPagination cursor.
Returns: Promise<CursorPage<InferenceProvider>>

avala.inferenceProviders.get()

Get a single inference provider by UID.
const provider = await avala.inferenceProviders.get("provider_uid");
Returns: Promise<InferenceProvider>

avala.inferenceProviders.create()

Create a new inference provider.
const provider = await avala.inferenceProviders.create({
  name: "My SageMaker",
  providerType: "sagemaker",
  config: { endpoint: "my-endpoint", region: "us-east-1" },
});
ParameterTypeRequiredDescription
namestringYesProvider name.
providerTypestringYesProvider type (e.g. "sagemaker", "openai").
configRecord<string, unknown>YesProvider-specific configuration.
descriptionstring?NoProvider description.
projectstring?NoScope to a project UID.
Returns: Promise<InferenceProvider>

avala.inferenceProviders.update()

Update an inference provider.
const provider = await avala.inferenceProviders.update("provider_uid", {
  isActive: false,
});
ParameterTypeRequiredDescription
uidstringYesProvider unique identifier.
namestring?NoProvider name.
descriptionstring?NoProvider description.
providerTypestring?NoProvider type.
configRecord<string, unknown>?NoConfiguration object.
isActiveboolean?NoEnable or disable.
projectstring?NoProject UID scope.
Returns: Promise<InferenceProvider>

avala.inferenceProviders.delete()

Delete an inference provider.
await avala.inferenceProviders.delete("provider_uid");
Returns: Promise<void>

avala.inferenceProviders.test()

Test connectivity to an inference provider.
const result = await avala.inferenceProviders.test("provider_uid");
// { success: boolean, message: string, testedAt: string }
Returns: Promise<{ success: boolean; message: string; testedAt: string }>

autoLabelJobs

avala.autoLabelJobs.list()

List auto-label jobs with optional filtering.
const page = await avala.autoLabelJobs.list({
  project: "proj_uid",
  status: "completed",
});
ParameterTypeDefaultDescription
projectstring?undefinedFilter by project UID.
statusstring?undefinedFilter by job status.
limitnumber?undefinedMaximum results per page.
cursorstring?undefinedPagination cursor.
Returns: Promise<CursorPage<AutoLabelJob>>

avala.autoLabelJobs.get()

Get a single auto-label job by UID.
const job = await avala.autoLabelJobs.get("job_uid");
console.log(`Progress: ${job.progressPct}%`);
Returns: Promise<AutoLabelJob>

avala.autoLabelJobs.create()

Create a new auto-label job for a project.
const job = await avala.autoLabelJobs.create("proj_uid", {
  modelType: "object_detection",
  confidenceThreshold: 0.85,
  labels: ["car", "truck"],
});
ParameterTypeRequiredDescription
projectUidstringYesProject to auto-label.
modelTypestring?NoModel type to use.
confidenceThresholdnumber?NoMinimum confidence score.
labelsstring[]?NoLabels to apply.
dryRunboolean?NoPreview without applying labels.
Returns: Promise<AutoLabelJob>

avala.autoLabelJobs.cancel()

Cancel a running auto-label job.
await avala.autoLabelJobs.cancel("job_uid");
Returns: Promise<void>

qualityTargets

All quality target methods are scoped to a project.

avala.qualityTargets.list()

List quality targets for a project.
const page = await avala.qualityTargets.list("proj_uid");
ParameterTypeDefaultDescription
projectUidstringProject unique identifier.
limitnumber?undefinedMaximum results per page.
cursorstring?undefinedPagination cursor.
Returns: Promise<CursorPage<QualityTarget>>

avala.qualityTargets.get()

Get a single quality target.
const target = await avala.qualityTargets.get("proj_uid", "target_uid");
Returns: Promise<QualityTarget>

avala.qualityTargets.create()

Create a quality target for a project.
const target = await avala.qualityTargets.create("proj_uid", {
  name: "Accuracy Target",
  metric: "accuracy",
  operator: "gte",
  threshold: 0.95,
  severity: "critical",
  notifyWebhook: true,
  notifyEmails: ["alerts@example.com"],
});
ParameterTypeRequiredDescription
projectUidstringYesProject unique identifier.
namestringYesTarget name.
metricstringYesMetric to track.
operatorstringYesComparison operator ("gte", "lte", etc.).
thresholdnumberYesThreshold value.
severitystring?NoSeverity level.
isActiveboolean?NoEnable or disable.
notifyWebhookboolean?NoSend webhook on breach.
notifyEmailsstring[]?NoEmail addresses for breach alerts.
Returns: Promise<QualityTarget>

avala.qualityTargets.update()

Update a quality target.
const target = await avala.qualityTargets.update("proj_uid", "target_uid", {
  threshold: 0.9,
});
Returns: Promise<QualityTarget>

avala.qualityTargets.delete()

Delete a quality target.
await avala.qualityTargets.delete("proj_uid", "target_uid");
Returns: Promise<void>

avala.qualityTargets.evaluate()

Evaluate all quality targets for a project and return current results.
const results = await avala.qualityTargets.evaluate("proj_uid");
for (const r of results) {
  console.log(`${r.name}: ${r.currentValue} (breached: ${r.isBreached})`);
}
Returns: Promise<QualityTargetEvaluation[]>

consensus

All consensus methods are scoped to a project.

avala.consensus.getSummary()

Get consensus summary statistics for a project.
const summary = await avala.consensus.getSummary("proj_uid");
console.log(`Mean score: ${summary.meanScore}`);
console.log(`Items with consensus: ${summary.itemsWithConsensus}/${summary.totalItems}`);
Returns: Promise<ConsensusSummary>

avala.consensus.listScores()

List consensus scores for individual items.
const page = await avala.consensus.listScores("proj_uid", { limit: 50 });
ParameterTypeDefaultDescription
projectUidstringProject unique identifier.
limitnumber?undefinedMaximum results per page.
cursorstring?undefinedPagination cursor.
Returns: Promise<CursorPage<ConsensusScore>>

avala.consensus.compute()

Trigger consensus computation for a project.
const result = await avala.consensus.compute("proj_uid");
console.log(result.status);  // "started"
Returns: Promise<ConsensusComputeResult>

avala.consensus.getConfig()

Get consensus configuration for a project.
const config = await avala.consensus.getConfig("proj_uid");
console.log(`IoU threshold: ${config.iouThreshold}`);
Returns: Promise<ConsensusConfig>

avala.consensus.updateConfig()

Update consensus configuration. Uses PUT (full replacement).
const config = await avala.consensus.updateConfig("proj_uid", {
  iouThreshold: 0.7,
  minAgreementRatio: 0.8,
  minAnnotations: 3,
});
ParameterTypeRequiredDescription
projectUidstringYesProject unique identifier.
iouThresholdnumber?NoIoU threshold for matching.
minAgreementRationumber?NoMinimum agreement ratio.
minAnnotationsnumber?NoMinimum annotations required.
Returns: Promise<ConsensusConfig>

webhooks

avala.webhooks.list()

List webhook subscriptions.
const page = await avala.webhooks.list();
ParameterTypeDefaultDescription
limitnumber?undefinedMaximum results per page.
cursorstring?undefinedPagination cursor.
Returns: Promise<CursorPage<Webhook>>

avala.webhooks.get()

Get a single webhook by UID.
const webhook = await avala.webhooks.get("webhook_uid");
Returns: Promise<Webhook>

avala.webhooks.create()

Create a new webhook subscription.
const webhook = await avala.webhooks.create({
  targetUrl: "https://example.com/webhook",
  events: ["task.completed", "export.ready"],
  isActive: true,
});
ParameterTypeRequiredDescription
targetUrlstringYesURL to receive events.
eventsstring[]YesEvents to subscribe to.
isActiveboolean?NoEnable the webhook (default: true).
Returns: Promise<Webhook>

avala.webhooks.update()

Update a webhook subscription.
const webhook = await avala.webhooks.update("webhook_uid", {
  isActive: false,
});
ParameterTypeRequiredDescription
uidstringYesWebhook unique identifier.
targetUrlstring?NoURL to receive events.
eventsstring[]?NoEvents to subscribe to.
isActiveboolean?NoEnable or disable.
Returns: Promise<Webhook>

avala.webhooks.delete()

Delete a webhook subscription.
await avala.webhooks.delete("webhook_uid");
Returns: Promise<void>

avala.webhooks.test()

Send a test event to a webhook.
const result = await avala.webhooks.test("webhook_uid");
// { success: boolean }
Returns: Promise<{ success: boolean }>

webhookDeliveries

avala.webhookDeliveries.list()

List webhook delivery attempts.
const page = await avala.webhookDeliveries.list({ limit: 20 });
ParameterTypeDefaultDescription
limitnumber?undefinedMaximum results per page.
cursorstring?undefinedPagination cursor.
Returns: Promise<CursorPage<WebhookDelivery>>

avala.webhookDeliveries.get()

Get a single webhook delivery by UID.
const delivery = await avala.webhookDeliveries.get("delivery_uid");
console.log(`Status: ${delivery.status}, Attempts: ${delivery.attempts}`);
Returns: Promise<WebhookDelivery>

organizations

avala.organizations.list()

List organizations.
const page = await avala.organizations.list({ limit: 20 });
ParameterTypeDefaultDescription
limitnumber?undefinedMaximum results per page.
cursorstring?undefinedPagination cursor.
Returns: Promise<CursorPage<Organization>>

avala.organizations.get()

Get a single organization by slug.
const org = await avala.organizations.get("my-org");
ParameterTypeDescription
slugstringOrganization slug.
Returns: Promise<Organization>

avala.organizations.create()

Create a new organization.
const org = await avala.organizations.create({
  name: "My Team",
  visibility: "private",
  industry: "technology",
});
ParameterTypeRequiredDescription
namestringYesOrganization name.
descriptionstring?NoDescription.
logostring?NoLogo URL.
websitestring?NoWebsite URL.
industrystring?NoIndustry.
emailstring?NoContact email.
phonestring?NoContact phone.
visibilitystring?No"public" or "private".
Returns: Promise<Organization>

avala.organizations.update()

Update an organization.
const org = await avala.organizations.update("my-org", {
  name: "New Name",
  description: "Updated description",
});
ParameterTypeRequiredDescription
slugstringYesOrganization slug.
namestring?NoOrganization name.
descriptionstring?NoDescription.
logostring?NoLogo URL.
websitestring?NoWebsite URL.
handlestring?NoOrganization handle.
industrystring?NoIndustry.
emailstring?NoContact email.
phonestring?NoContact phone.
visibilitystring?NoVisibility setting.
Returns: Promise<Organization>

avala.organizations.delete()

Deleting an organization is irreversible and may cascade-delete all associated projects, datasets, and other resources. Double-check the organization slug before calling this method.
Delete an organization.
await avala.organizations.delete("my-org");
Returns: Promise<void>

avala.organizations.industryChoices()

Get the list of valid industry choices.
const choices = await avala.organizations.industryChoices();
Returns: Promise<Record<string, unknown>> — An object containing industry choices.

avala.organizations.listMembers()

List members of an organization.
const page = await avala.organizations.listMembers("my-org", { role: "admin" });
ParameterTypeDefaultDescription
slugstringOrganization slug.
searchstring?undefinedSearch by name or email.
rolestring?undefinedFilter by role.
limitnumber?undefinedMaximum results per page.
cursorstring?undefinedPagination cursor.
Returns: Promise<CursorPage<OrganizationMember>>

avala.organizations.removeMember()

Remove a member from an organization.
await avala.organizations.removeMember("my-org", "user_uid");
Returns: Promise<void>

avala.organizations.updateMemberRole()

Update a member’s role.
await avala.organizations.updateMemberRole("my-org", "user_uid", { role: "admin" });
Returns: Promise<void>

avala.organizations.leave()

Leave an organization (as the current user).
await avala.organizations.leave("my-org");
Returns: Promise<void>

avala.organizations.transferOwnership()

Transfer organization ownership to another member.
await avala.organizations.transferOwnership("my-org", { newOwnerUid: "new_owner_uid" });
Returns: Promise<void>

avala.organizations.listInvitations()

List pending invitations for an organization.
const invitations = await avala.organizations.listInvitations("my-org");
Returns: Promise<Invitation[]>

avala.organizations.createInvitation()

Invite a user to an organization.
const invitation = await avala.organizations.createInvitation("my-org", {
  email: "user@example.com",
  role: "member",
});
ParameterTypeRequiredDescription
slugstringYesOrganization slug.
emailstringYesEmail to invite.
rolestring?NoRole for the invitee.
Returns: Promise<Invitation>

avala.organizations.resendInvitation()

Resend a pending invitation.
await avala.organizations.resendInvitation("my-org", "invitation_uid");
Returns: Promise<void>

avala.organizations.cancelInvitation()

Cancel a pending invitation.
await avala.organizations.cancelInvitation("my-org", "invitation_uid");
Returns: Promise<void>

avala.organizations.listTeams()

List teams in an organization.
const teams = await avala.organizations.listTeams("my-org");
Returns: Promise<Team[]>

avala.organizations.createTeam()

Create a team.
const team = await avala.organizations.createTeam("my-org", {
  name: "ML Engineers",
  description: "Machine learning team",
});
ParameterTypeRequiredDescription
slugstringYesOrganization slug.
namestringYesTeam name.
descriptionstring?NoTeam description.
colorstring?NoTeam color.
Returns: Promise<Team>

avala.organizations.getTeam()

Get a team by slug.
const team = await avala.organizations.getTeam("my-org", "team_slug");
Returns: Promise<Team>

avala.organizations.updateTeam()

Update a team.
const team = await avala.organizations.updateTeam("my-org", "team_slug", { name: "Updated Name" });
Returns: Promise<Team>

avala.organizations.deleteTeam()

Delete a team.
await avala.organizations.deleteTeam("my-org", "team_slug");
Returns: Promise<void>

avala.organizations.listTeamMembers()

List members of a team.
const members = await avala.organizations.listTeamMembers("my-org", "team_slug");
Returns: Promise<TeamMember[]>

avala.organizations.addTeamMember()

Add a member to a team.
const member = await avala.organizations.addTeamMember("my-org", "team_slug", {
  userUid: "user_uid",
  role: "member",
});
Returns: Promise<TeamMember>

avala.organizations.removeTeamMember()

Remove a member from a team.
await avala.organizations.removeTeamMember("my-org", "team_slug", "user_uid");
Returns: Promise<void>

avala.organizations.updateTeamMemberRole()

Update a team member’s role.
await avala.organizations.updateTeamMemberRole("my-org", "team_slug", "user_uid", {
  role: "lead",
});
Returns: Promise<void>

slices

avala.slices.list()

List slices for an owner.
const page = await avala.slices.list("my-org", { limit: 20 });
ParameterTypeDefaultDescription
ownerstringOwner slug (organization or user).
limitnumber?undefinedMaximum results per page.
cursorstring?undefinedPagination cursor.
Returns: Promise<CursorPage<Slice>>

avala.slices.get()

Get a single slice.
const slice = await avala.slices.get("my-org", "my-slice");
ParameterTypeDescription
ownerstringOwner slug.
slugstringSlice slug.
Returns: Promise<Slice>

avala.slices.create()

Create a new slice.
const slice = await avala.slices.create({
  name: "Validation Set",
  visibility: "private",
  subSlices: [{ dataset: "dataset_uid", filters: {} }],
  organization: "my-org",
});
ParameterTypeRequiredDescription
namestringYesSlice name.
visibilitystringYes"public" or "private".
subSlicesArray<{ dataset: string; filters: object }>YesSub-slice definitions.
organizationstring?NoOrganization slug to own the slice.
randomSelectionCountnumber?NoRandomly select N items.
Returns: Promise<Slice>

avala.slices.listItems()

List items in a slice.
const page = await avala.slices.listItems("my-org", "my-slice", { limit: 50 });
ParameterTypeDefaultDescription
ownerstringOwner slug.
slugstringSlice slug.
limitnumber?undefinedMaximum results per page.
cursorstring?undefinedPagination cursor.
Returns: Promise<CursorPage<SliceItem>>

avala.slices.getItem()

Get a single item within a slice.
const item = await avala.slices.getItem("my-org", "my-slice", "item_uid");
ParameterTypeDescription
ownerstringOwner slug.
slugstringSlice slug.
itemUidstringItem unique identifier.
Returns: Promise<SliceItem>

Types

Dataset

interface Dataset {
  uid: string;
  name: string;
  slug: string;
  itemCount: number;
  dataType: string | null;
  createdAt: string | null;
  updatedAt: string | null;
}

DatasetItem

interface DatasetItem {
  id: number | null;
  uid: string;
  key: string | null;
  dataset: string | null;
  url: string | null;
  gpuTextureUrl: string | null;
  thumbnails: string[] | null;
  videoThumbnail: string | null;
  metadata: Record<string, unknown> | null;
  exportSnippet: Record<string, unknown> | null;
  annotations: Record<string, unknown> | null;
  cropData: Record<string, unknown> | null;
  relatedItems: Record<string, unknown>[] | null;
  relatedSequenceUid: string | null;
  createdAt: string | null;
  updatedAt: string | null;
}

DatasetSequence

interface DatasetSequence {
  uid: string;
  key: string | null;
  customUuid: string | null;
  status: string | null;
  featuredImage: string | null;
  numberOfFrames: number | null;
  views: Record<string, unknown>[] | null;
  cropData: Record<string, unknown> | null;
  predefinedLabels: Record<string, unknown>[] | null;
  frames: Record<string, unknown>[] | null;
  metrics: Record<string, unknown> | null;
  datasetUid: string | null;
  allowLidarCalibration: boolean | null;
  lidarCalibrationEnabled: boolean | null;
  cameraCalibrationEnabled: boolean | null;
}

Project

interface Project {
  uid: string;
  name: string;
  status: string | null;
  createdAt: string | null;
  updatedAt: string | null;
}

Task

interface Task {
  uid: string;
  type: string | null;
  name: string | null;
  status: string | null;
  project: string | null;
  createdAt: string | null;
  updatedAt: string | null;
}

Export

interface Export {
  uid: string;
  status: string | null;
  downloadUrl: string | null;
  createdAt: string | null;
  updatedAt: string | null;
}

StorageConfig

interface StorageConfig {
  uid: string;
  name: string;
  provider: string;
  s3BucketName: string | null;
  s3BucketRegion: string | null;
  s3BucketPrefix: string | null;
  s3IsAccelerated: boolean;
  gcStorageBucketName: string | null;
  gcStoragePrefix: string | null;
  isVerified: boolean;
  lastVerifiedAt: string | null;
  createdAt: string | null;
  updatedAt: string | null;
}

Agent

interface Agent {
  uid: string;
  name: string;
  description: string | null;
  events: string[];
  callbackUrl: string | null;
  isActive: boolean;
  project: string | null;
  taskTypes: string[];
  createdAt: string | null;
  updatedAt: string | null;
}

AgentExecution

interface AgentExecution {
  uid: string;
  registration: string;
  eventType: string;
  task: string | null;
  result: string | null;
  status: string | null;
  action: string | null;
  eventPayload: Record<string, unknown> | null;
  responsePayload: Record<string, unknown> | null;
  errorMessage: string | null;
  startedAt: string | null;
  completedAt: string | null;
  createdAt: string | null;
  updatedAt: string | null;
}

InferenceProvider

interface InferenceProvider {
  uid: string;
  name: string;
  description: string | null;
  providerType: string | null;
  config: Record<string, unknown> | null;
  isActive: boolean;
  project: string | null;
  lastTestAt: string | null;
  lastTestSuccess: boolean | null;
  createdAt: string | null;
  updatedAt: string | null;
}

AutoLabelJob

interface AutoLabelJob {
  uid: string;
  status: string | null;
  modelType: string | null;
  confidenceThreshold: number | null;
  labels: string[];
  dryRun: boolean;
  totalItems: number;
  processedItems: number;
  successfulItems: number;
  failedItems: number;
  skippedItems: number;
  progressPct: number | null;
  errorMessage: string | null;
  summary: Record<string, unknown> | null;
  startedAt: string | null;
  completedAt: string | null;
  createdAt: string | null;
}

QualityTarget

interface QualityTarget {
  uid: string;
  name: string;
  metric: string;
  operator: string;
  threshold: number;
  severity: string | null;
  isActive: boolean;
  notifyWebhook: boolean;
  notifyEmails: string[];
  lastEvaluatedAt: string | null;
  lastValue: number | null;
  isBreached: boolean;
  breachCount: number;
  lastBreachedAt: string | null;
  createdAt: string | null;
  updatedAt: string | null;
}

QualityTargetEvaluation

interface QualityTargetEvaluation {
  uid: string;
  name: string;
  metric: string;
  threshold: number;
  operator: string;
  currentValue: number;
  isBreached: boolean;
  severity: string | null;
}

ConsensusConfig

interface ConsensusConfig {
  uid: string;
  iouThreshold: number;
  minAgreementRatio: number;
  minAnnotations: number;
  createdAt: string | null;
  updatedAt: string | null;
}

ConsensusScore

interface ConsensusScore {
  uid: string;
  datasetItemUid: string;
  taskName: string;
  scoreType: string | null;
  score: number;
  annotatorCount: number;
  details: Record<string, unknown> | null;
  createdAt: string | null;
}

ConsensusSummary

interface ConsensusSummary {
  meanScore: number;
  medianScore: number;
  minScore: number;
  maxScore: number;
  totalItems: number;
  itemsWithConsensus: number;
  scoreDistribution: Record<string, unknown> | null;
  byTaskName: unknown[] | null;
}

ConsensusComputeResult

interface ConsensusComputeResult {
  status: string;
  message: string;
}

Webhook

interface Webhook {
  uid: string;
  targetUrl: string;
  events: string[];
  isActive: boolean;
  createdAt: string | null;
  updatedAt: string | null;
}

WebhookDelivery

interface WebhookDelivery {
  uid: string;
  subscription: string;
  eventType: string;
  payload: Record<string, unknown>;
  responseStatus: number | null;
  responseBody: string | null;
  attempts: number;
  nextRetryAt: string | null;
  status: string | null;
  createdAt: string | null;
  updatedAt: string | null;
}

Organization

interface Organization {
  uid: string;
  name: string;
  slug: string;
  handle: string | null;
  description: string | null;
  logo: string | null;
  website: string | null;
  industry: string | null;
  email: string | null;
  phone: string | null;
  visibility: string | null;
  plan: string | null;
  isVerified: boolean;
  isActive: boolean;
  memberCount: number | null;
  teamCount: number | null;
  datasetCount: number | null;
  projectCount: number | null;
  sliceCount: number | null;
  role: string | null;
  joinedAt: string | null;
  allowedDomains: string[] | null;
  createdAt: string | null;
  updatedAt: string | null;
}

OrganizationMember

interface OrganizationMember {
  userUid: string;
  username: string | null;
  email: string | null;
  fullName: string | null;
  picture: string | null;
  role: string | null;
  createdAt: string | null;
}

Invitation

interface Invitation {
  uid: string;
  organizationName: string | null;
  organizationSlug: string | null;
  invitedEmail: string;
  invitedByUsername: string | null;
  role: string | null;
  status: string | null;
  expiresAt: string | null;
  isExpired: boolean | null;
  acceptUrl: string | null;
  copyLink: string | null;
  createdAt: string | null;
}

Team

interface Team {
  uid: string;
  name: string;
  slug: string | null;
  description: string | null;
  color: string | null;
  organizationUid: string | null;
  organizationName: string | null;
  organizationSlug: string | null;
  memberCount: number | null;
  createdAt: string | null;
  updatedAt: string | null;
}

TeamMember

interface TeamMember {
  userUid: string;
  username: string | null;
  email: string | null;
  fullName: string | null;
  picture: string | null;
  role: string | null;
  createdAt: string | null;
}

Slice

interface Slice {
  uid: string;
  name: string;
  slug: string | null;
  ownerName: string | null;
  organization: Record<string, unknown> | null;
  visibility: string | null;
  status: string | null;
  itemCount: number | null;
  subSlices: Array<Record<string, unknown>> | null;
  sourceData: unknown | null;
  featuredSliceItemUrls: string[] | null;
}

SliceItem

interface SliceItem {
  id: number | null;
  uid: string;
  key: string | null;
  dataset: string | null;
  url: string | null;
  gpuTextureUrl: string | null;
  thumbnails: string[] | null;
  videoThumbnail: string | null;
  metadata: Record<string, unknown> | null;
  exportSnippet: Record<string, unknown> | null;
  annotations: Record<string, unknown> | null;
  cropData: Record<string, unknown> | null;
  relatedItems: Array<Record<string, unknown>> | null;
  relatedSequenceUid: string | null;
  createdAt: string | null;
  updatedAt: string | null;
}

Pagination

CursorPage

All list() methods return a CursorPage<T>:
interface CursorPage<T> {
  items: T[];
  nextCursor: string | null;
  previousCursor: string | null;
  hasMore: boolean;
}
PropertyTypeDescription
itemsT[]Items on the current page.
nextCursorstring | nullCursor for the next page. null if last page.
previousCursorstring | nullCursor for the previous page.
hasMorebooleantrue if nextCursor is not null.
const page = await avala.datasets.list({ limit: 20 });
for (const dataset of page.items) {
  console.log(dataset.name);
}

if (page.hasMore) {
  const next = await avala.datasets.list({ limit: 20, cursor: page.nextCursor! });
}

RateLimitInfo

interface RateLimitInfo {
  limit: string | null;      // X-RateLimit-Limit header
  remaining: string | null;  // X-RateLimit-Remaining header
  reset: string | null;      // X-RateLimit-Reset header
}

Errors

All errors extend AvalaError:
import {
  AvalaError,
  AuthenticationError,
  NotFoundError,
  RateLimitError,
  ValidationError,
  ServerError,
} from "@avala-ai/sdk";
ErrorHTTP StatusExtra Properties
AvalaErrorAnystatusCode, body
AuthenticationError401
NotFoundError404
RateLimitError429retryAfter: number | null
ValidationError400 / 422details: unknown[]
ServerError5xx
try {
  const dataset = await avala.datasets.get("nonexistent");
} catch (error) {
  if (error instanceof NotFoundError) {
    console.log(`Not found: ${error.message}`);
  } else if (error instanceof RateLimitError) {
    console.log(`Retry after ${error.retryAfter}s`);
  } else if (error instanceof AvalaError) {
    console.log(`Error (${error.statusCode}): ${error.message}`);
  }
}

Exported Symbols

// Default export
import Avala from "@avala-ai/sdk";

// Named types
import type {
  Agent,
  AgentExecution,
  AutoLabelJob,
  AvalaConfig,
  ConsensusComputeResult,
  ConsensusConfig,
  ConsensusScore,
  ConsensusSummary,
  CursorPage,
  Dataset,
  DatasetItem,
  DatasetSequence,
  Export,
  InferenceProvider,
  Invitation,
  Organization,
  OrganizationMember,
  Project,
  QualityTarget,
  QualityTargetEvaluation,
  RateLimitInfo,
  Slice,
  SliceItem,
  StorageConfig,
  Task,
  Team,
  TeamMember,
  Webhook,
  WebhookDelivery,
} from "@avala-ai/sdk";

// Error classes
import {
  AvalaError,
  AuthenticationError,
  NotFoundError,
  RateLimitError,
  ValidationError,
  ServerError,
} from "@avala-ai/sdk";

Environment Variables

VariableDescriptionDefault
AVALA_API_KEYAPI key (used when apiKey not passed to constructor).Required
AVALA_BASE_URLBase API URL override.https://api.avala.ai/api/v1

Runtime Requirements

  • Node.js 18+ (uses native fetch)
  • Zero runtime dependencies
  • Also works in Deno and Bun