Skip to Content
ResourcesExamples

Examples

Practical code examples for working with the Avala API.

Setup

All examples use Python with the requests library:

import requests import os API_KEY = os.environ.get("AVALA_API_KEY") BASE_URL = "https://api.avala.ai/api/v1" headers = {"X-Avala-Api-Key": API_KEY}

Datasets

List All Datasets

def list_all_datasets(): """Fetch all datasets with pagination.""" all_datasets = [] url = f"{BASE_URL}/datasets/" while url: response = requests.get(url, headers=headers) data = response.json() all_datasets.extend(data["results"]) url = data.get("next") return all_datasets datasets = list_all_datasets() for ds in datasets: print(f"{ds['name']} ({ds['item_count']} items)")

Create a Dataset

def create_dataset(name, data_type="image", visibility="private"): response = requests.post( f"{BASE_URL}/datasets/", headers=headers, json={ "name": name, "data_type": data_type, "visibility": visibility } ) return response.json() dataset = create_dataset("My Training Data") print(f"Created: {dataset['slug']}")

Get Dataset with Items

def get_dataset_with_items(owner, slug, limit=100): # Get dataset details dataset = requests.get( f"{BASE_URL}/datasets/{owner}/{slug}/", headers=headers ).json() # Get items items = requests.get( f"{BASE_URL}/datasets/{owner}/{slug}/items/", headers=headers, params={"limit": limit} ).json() return { "dataset": dataset, "items": items["results"] }

Projects

List Active Projects

def list_active_projects(): response = requests.get( f"{BASE_URL}/projects/", headers=headers, params={"status": "ACTIVE"} ) return response.json()["results"] projects = list_active_projects() for proj in projects: print(f"{proj['name']} - {proj['task_type']}")

Get Project Metrics

def get_project_progress(project_uid): response = requests.get( f"{BASE_URL}/projects/{project_uid}/metrics/", headers=headers ) metrics = response.json() completion = (metrics["completed_tasks"] / metrics["total_tasks"]) * 100 print(f"Progress: {completion:.1f}%") print(f"Acceptance rate: {metrics['acceptance_rate'] * 100:.1f}%") return metrics

Pause and Resume Project

def pause_project(project_uid): response = requests.post( f"{BASE_URL}/projects/{project_uid}/pause/", headers=headers ) return response.json() def resume_project(project_uid): response = requests.post( f"{BASE_URL}/projects/{project_uid}/resume/", headers=headers ) return response.json()

Exports

Create and Download Export

import time def export_project(project_uid, format="coco"): # Create export response = requests.post( f"{BASE_URL}/projects/{project_uid}/exports/", headers=headers, json={"format": format} ) export = response.json() export_uid = export["uid"] # Poll until complete while True: status_response = requests.get( f"{BASE_URL}/exports/{export_uid}/", headers=headers ) export = status_response.json() if export["status"] == "completed": return export["download_url"] elif export["status"] == "failed": raise Exception("Export failed") time.sleep(5) # Usage download_url = export_project("proj-uuid-001", "coco") print(f"Download: {download_url}")

Export with Filters

def export_completed_annotations(project_uid, labels=None): filters = {"status": "completed"} if labels: filters["labels"] = labels response = requests.post( f"{BASE_URL}/projects/{project_uid}/exports/", headers=headers, json={ "format": "coco", "filters": filters } ) return response.json() # Export only car and truck annotations export = export_completed_annotations( "proj-uuid-001", labels=["car", "truck"] )

Organizations

List Organization Members

def list_org_members(org_slug): response = requests.get( f"{BASE_URL}/organizations/{org_slug}/members/", headers=headers ) return response.json()["results"] members = list_org_members("acme-ai") for member in members: print(f"{member['user']['username']} - {member['role']}")

Invite New Member

def invite_member(org_slug, email, role="member"): response = requests.post( f"{BASE_URL}/organizations/{org_slug}/invitations/", headers=headers, json={ "email": email, "role": role } ) return response.json()

Error Handling

Robust API Calls

import time from requests.exceptions import RequestException def api_call_with_retry(method, url, max_retries=3, **kwargs): """Make API call with retry logic for rate limits and errors.""" for attempt in range(max_retries): try: response = requests.request(method, url, headers=headers, **kwargs) # Handle rate limits if response.status_code == 429: wait_time = 2 ** attempt print(f"Rate limited, waiting {wait_time}s...") time.sleep(wait_time) continue response.raise_for_status() return response.json() except RequestException as e: if attempt == max_retries - 1: raise time.sleep(2 ** attempt) raise Exception("Max retries exceeded") # Usage datasets = api_call_with_retry("GET", f"{BASE_URL}/datasets/")
Last updated on