EvoluAIv2 Docs

Examples

Code Examples

Create Analysis

const API_KEY = 'evai_your_key_here';
const BASE_URL = 'https://api.evolu-ai.com/trpc';

async function createAnalysis(audioFile, salespersonId) {
  // 1. Get presigned URL
  const presignRes = await fetch(
    `${BASE_URL}/upload.getPresignedUrl?input=${encodeURIComponent(JSON.stringify({
      filename: audioFile.name,
      contentType: audioFile.type
    }))}`,
    { headers: { 'X-API-Key': API_KEY } }
  );
  
  const { result: { data: presignData } } = await presignRes.json();
  
  // 2. Upload file
  const formData = new FormData();
  Object.entries(presignData.fields).forEach(([key, value]) => {
    formData.append(key, value);
  });
  formData.append('file', audioFile);
  
  await fetch(presignData.url, {
    method: 'POST',
    body: formData
  });
  
  // 3. Create analysis
  const analysisRes = await fetch(`${BASE_URL}/analysis.create`, {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'X-API-Key': API_KEY
    },
    body: JSON.stringify({
      json: {
        salespersonId: salespersonId,
        audioKey: presignData.fields.key
      }
    })
  });
  
  return await analysisRes.json();
}

List with Filters

const filters = {
  limit: 20,
  filters: {
    salespersonId: 'user_xxx',
    dateFrom: '2024-01-01',
    dateTo: '2024-01-31',
    minScore: 80
  }
};

const res = await fetch(
  `${BASE_URL}/analysis.list?input=${encodeURIComponent(JSON.stringify(filters))}`,
  { headers: { 'X-API-Key': API_KEY } }
);

const { result: { data } } = await res.json();

Upload via cURL

# 1. Get URL
curl -X GET 'https://api.evolu-ai.com/trpc/upload.getPresignedUrl?input={"filename":"audio.mp3","contentType":"audio/mpeg"}' \
  -H 'X-API-Key: evai_your_key'

# 2. Upload (use returned values)
curl -X POST 'RETURNED_URL' \
  -F 'key=FIELD_KEY' \
  -F 'bucket=evoluai-storage' \
  -F 'X-Amz-Algorithm=AWS4-HMAC-SHA256' \
  -F 'X-Amz-Credential=...' \
  -F 'X-Amz-Date=...' \
  -F 'X-Amz-Signature=...' \
  -F 'file=@/path/audio.mp3'

Create Analysis via cURL

curl -X POST 'https://api.evolu-ai.com/trpc/analysis.create' \
  -H 'Content-Type: application/json' \
  -H 'X-API-Key: evai_your_key' \
  -d '{
    "json": {
      "salespersonId": "user_xxx",
      "audioKey": "analyses/comp_xxx/audio.mp3"
    }
  }'

Create User

const res = await fetch(`${BASE_URL}/user.create`, {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'X-API-Key': API_KEY
  },
  body: JSON.stringify({
    json: {
      name: 'John Doe',
      email: 'john@company.com',
      role: 'salesperson',
      supervisorId: 'user_supervisor_xxx'
    }
  })
});

Check Credits

const res = await fetch(
  `${BASE_URL}/credits.getSummary`,
  { headers: { 'X-API-Key': API_KEY } }
);

const { result: { data } } = await res.json();
console.log(`Balance: ${data.currentBalance}`);

TypeScript Types

interface Analysis {
  id: string;
  salespersonId: string;
  salespersonName: string;
  clientName?: string;
  score: number;
  summary: string;
  transcript: string;
  profile: string;
  stage: 'Connect' | 'Qualify' | 'Present' | 'Close' | 'Negotiate';
  bant: {
    budget: string;
    authority: string;
    need: string;
    timing: string;
  };
  objections: Array<{
    objection: string;
    resolved: boolean;
  }>;
  strengths: string[];
  improvements: string[];
  dimensionScores: {
    rapport: number;
    listening: number;
    objections: number;
    clarity: number;
    closing: number;
  };
  jobFunctionScore: number;
  jobFunctionAnalysis: {
    microObjectives: Array<{
      criteria: string;
      met: boolean;
      timestamp: string | null;
      evidence: string | null;
    }>;
    negativeIndicators: Array<{
      criteria: string;
      present: boolean;
      timestamp: string | null;
      evidence: string | null;
    }>;
  };
  tokensUsed: number;
  cost: number;
  audioUrl: string;
  audioDuration: number;
  createdAt: string;
}

interface User {
  id: string;
  name: string;
  email: string;
  role: 'salesperson' | 'supervisor' | 'admin';
  jobFunction?: {
    id: string;
    name: string;
    type: string;
  };
  supervisor?: {
    id: string;
    name: string;
  };
  isActive: boolean;
}

interface CreditSummary {
  currentBalance: number;
  planCredits: number;
  planName: string;
  usedThisMonth: number;
  remainingThisMonth: number;
  totalTokensUsed: number;
  estimatedMinutesRemaining: number;
}

On this page