Skip to content

Basic Usage Examples

Common patterns for using OpenComplai in Python and JavaScript.

Python: Create, Read, Update, Delete (CRUD)

Installation

pip install opencomplai python-dotenv

Complete Example

"""Basic CRUD operations with OpenComplai."""

import os
from dotenv import load_dotenv
from opencomplai import Client

# Load environment variables
load_dotenv()

def main():
    """Run basic CRUD example."""

    # Initialize client
    api_key = os.getenv("OPENCOMPLAI_API_KEY")
    client = Client(api_key=api_key)

    # CREATE - Add a new document
    print("šŸ“ Creating document...")
    doc = client.documents.create(
        title="Project Report Q2 2026",
        content="""
        # Q2 2026 Report

        ## Executive Summary
        Strong quarter with 35% growth.

        ## Key Metrics
        - Revenue: $2.5M
        - Customers: 500+
        - Employees: 25
        """
    )
    print(f"āœ… Created: {doc.id}")
    print(f"   Title: {doc.title}")
    print(f"   Status: {doc.processing_status}")

    # READ - Retrieve document
    print("\nšŸ“– Reading document...")
    retrieved = client.documents.get(doc.id)
    print(f"āœ… Retrieved: {retrieved.title}")
    print(f"   Content: {retrieved.content[:100]}...")

    # UPDATE - Modify document
    print("\nāœļø  Updating document...")
    retrieved.update(
        title="Q2 2026 Final Report",
        description="Final version with all metrics"
    )
    print(f"āœ… Updated: {retrieved.title}")

    # LIST - Browse documents
    print("\nšŸ“š Listing documents...")
    docs = client.documents.list(limit=5, offset=0)
    print(f"āœ… Found {len(docs)} documents (limited to 5)")
    for i, d in enumerate(docs, 1):
        print(f"   {i}. {d.title}")

    # DELETE - Remove document
    print("\nšŸ—‘ļø  Deleting document...")
    retrieved.delete()
    print(f"āœ… Deleted: {doc.id}")

    print("\nšŸŽ‰ CRUD operations complete!")

if __name__ == "__main__":
    main()

Output

šŸ“ Creating document...
āœ… Created: doc_abc123
   Title: Project Report Q2 2026
   Status: pending

šŸ“– Reading document...
āœ… Retrieved: Project Report Q2 2026
   Content: # Q2 2026 Report...

āœļø  Updating document...
āœ… Updated: Q2 2026 Final Report

šŸ“š Listing documents...
āœ… Found 5 documents (limited to 5)
   1. Q2 2026 Final Report
   2. Meeting Notes
   3. Budget Plan
   4. Team Updates
   5. Client Proposal

šŸ—‘ļø  Deleting document...
āœ… Deleted: doc_abc123

šŸŽ‰ CRUD operations complete!

JavaScript: Async/Await Pattern

Installation

npm install @opencomplai/sdk

Complete Example

import { OpenComplai } from '@opencomplai/sdk';

async function main() {
  const client = new OpenComplai({
    apiKey: process.env.OPENCOMPLAI_API_KEY
  });

  // CREATE - Add document
  console.log("šŸ“ Creating document...");
  const doc = await client.documents.create({
    title: "Marketing Strategy 2026",
    content: `
      # Marketing Strategy

      ## Q1-Q2 Focus
      - Expand social media reach
      - Launch podcast series
      - Partner with 5 influencers

      ## Budget: $50,000
    `
  });
  console.log(`āœ… Created: ${doc.id}`);
  console.log(`   Title: ${doc.title}`);

  // READ - Get document
  console.log("\nšŸ“– Reading document...");
  const retrieved = await client.documents.get(doc.id);
  console.log(`āœ… Title: ${retrieved.title}`);

  // UPDATE - Modify document
  console.log("\nāœļø  Updating document...");
  await retrieved.update({
    title: "Marketing Strategy 2026 - Final"
  });
  console.log(`āœ… Updated: ${retrieved.title}`);

  // LIST - Browse documents
  console.log("\nšŸ“š Listing documents...");
  const docs = await client.documents.list({ limit: 5 });
  console.log(`āœ… Found ${docs.length} documents`);
  docs.forEach((d, i) => {
    console.log(`   ${i + 1}. ${d.title}`);
  });

  // DELETE - Remove document
  console.log("\nšŸ—‘ļø  Deleting document...");
  await doc.delete();
  console.log(`āœ… Deleted: ${doc.id}`);

  console.log("\nšŸŽ‰ CRUD operations complete!");
}

main().catch(console.error);

Python: Error Handling

Handling Common Errors

from opencomplai import Client
from opencomplai.errors import (
    APIError,
    ValidationError,
    RateLimitError,
    AuthenticationError
)

client = Client(api_key="sk_test_xyz...")

try:
    # Create document with validation
    doc = client.documents.create(
        title="My Document",
        content="Document content here"
    )
    print(f"āœ… Created: {doc.id}")

except ValidationError as e:
    # Invalid input data
    print(f"āŒ Validation error: {e.message}")
    print(f"   Details: {e.details}")

except AuthenticationError as e:
    # Invalid API key
    print(f"āŒ Auth failed: Check your API key")

except RateLimitError as e:
    # Too many requests
    print(f"āŒ Rate limited. Retry after {e.retry_after}s")
    import time
    time.sleep(e.retry_after)
    doc = client.documents.create(...)  # Retry

except APIError as e:
    # Server error
    print(f"āŒ API error: {e.status_code} - {e.message}")

JavaScript: File Upload

Upload from File

import { OpenComplai } from '@opencomplai/sdk';
import fs from 'fs';

async function uploadDocument(filePath) {
  const client = new OpenComplai({
    apiKey: process.env.OPENCOMPLAI_API_KEY
  });

  // Read file
  const fileContent = fs.readFileSync(filePath, 'utf-8');
  const fileName = filePath.split('/').pop();

  // Create document from file
  const doc = await client.documents.create({
    title: fileName,
    content: fileContent,
    metadata: {
      source: 'file',
      originalPath: filePath
    }
  });

  console.log(`āœ… Uploaded: ${doc.title}`);
  console.log(`   Status: ${doc.processing_status}`);

  return doc;
}

// Usage
uploadDocument('./reports/q2-summary.txt');

Python: Polling for Results

Wait for Processing to Complete

import time
from opencomplai import Client

client = Client(api_key="sk_test_xyz...")

# Create document
doc = client.documents.create(
    title="Analysis Document",
    content="# Data to analyze\n\n..."
)
print(f"Created: {doc.id}")
print(f"Status: {doc.processing_status}")

# Poll until processing completes
max_wait = 300  # 5 minutes
poll_interval = 2  # 2 seconds
elapsed = 0

while elapsed < max_wait:
    # Refresh document status
    doc = client.documents.get(doc.id)

    if doc.processing_status == 'completed':
        print(f"āœ… Processing complete!")
        break
    elif doc.processing_status == 'failed':
        print(f"āŒ Processing failed: {doc.processing_error}")
        break
    else:
        print(f"ā³ Still processing... ({elapsed}s)")
        time.sleep(poll_interval)
        elapsed += poll_interval
else:
    print(f"āŒ Timeout waiting for processing")

Batch Operations

Process Multiple Documents (Python)

from opencomplai import Client

client = Client(api_key="sk_test_xyz...")

# Documents to process
documents = [
    {"title": "Doc 1", "content": "Content 1"},
    {"title": "Doc 2", "content": "Content 2"},
    {"title": "Doc 3", "content": "Content 3"},
]

print(f"Creating {len(documents)} documents...")
created_docs = []

for doc_data in documents:
    doc = client.documents.create(**doc_data)
    created_docs.append(doc)
    print(f"  āœ… Created: {doc.id}")

print(f"\nāœ… Created {len(created_docs)} documents")

# List all created documents
all_docs = client.documents.list(limit=100)
print(f"Total documents in account: {len(all_docs)}")