Node.js Examples

Complete code examples for integrating Skej Studio API with Node.js

Setup

Install dependencies and configure your client

Install Axios:

npm install axios

Create API Client:

const axios = require('axios');

const studioClient = axios.create({
  baseURL: 'https://api.staging.agnt.ai',
  headers: {
    'Authorization': `Bearer ${process.env.STUDIO_SERVICE_KEY}`,
    'Content-Type': 'application/json'
  }
});

module.exports = studioClient;

List Prompts

const studioClient = require('./studioClient');

async function listPrompts(tenantId) {
  try {
    const response = await studioClient.get(
      `/tenants/${tenantId}/prompts`,
      {
        params: {
          page: 1,
          per_page: 20,
          search: 'customer'
        }
      }
    );

    console.log('Prompts:', response.data);
    return response.data;
  } catch (error) {
    if (error.response) {
      console.error('Error:', error.response.status, error.response.data);
    } else {
      console.error('Error:', error.message);
    }
    throw error;
  }
}

// Usage
listPrompts('tenant_123');

Create a Prompt

async function createPrompt(tenantId, promptData) {
  try {
    const response = await studioClient.post(
      `/tenants/${tenantId}/prompts`,
      {
        promptName: promptData.name,
        displayName: promptData.displayName,
        description: promptData.description,
        template: promptData.template,
        category: promptData.category,
        variables: promptData.variables
      }
    );

    console.log('Prompt created:', response.data);
    return response.data;
  } catch (error) {
    console.error('Failed to create prompt:', error.response?.data);
    throw error;
  }
}

// Usage
createPrompt('tenant_123', {
  name: 'customer_support_agent',
  displayName: 'Customer Support Agent',
  description: 'Handles customer inquiries',
  template: 'You are a helpful customer support agent...',
  category: 'Support',
  variables: ['customer_name', 'issue_type']
});

Monitor Activity Traces

async function getTraces(tenantId) {
  try {
    const response = await studioClient.get(
      `/tenants/${tenantId}/traces`,
      {
        params: {
          page: 1,
          per_page: 10
        }
      }
    );

    const traces = response.data.data;

    traces.forEach(trace => {
      console.log(`Trace ${trace.traceId}:`);
      console.log(`  Model: ${trace.model}`);
      console.log(`  Duration: ${trace.duration}ms`);
      console.log(`  Cost: $${trace.cost}`);
      console.log(`  Tokens: ${trace.totalTokens}`);
    });

    return traces;
  } catch (error) {
    console.error('Failed to fetch traces:', error.response?.data);
    throw error;
  }
}

// Usage
getTraces('tenant_123');

Complete Error Handling Example

async function makeStudioRequest(endpoint, options = {}) {
  try {
    const response = await studioClient.request({
      url: endpoint,
      ...options
    });
    return response.data;
  } catch (error) {
    if (error.response) {
      // The request was made and the server responded with a status code
      // that falls out of the range of 2xx
      switch (error.response.status) {
        case 401:
          console.error('Unauthorized: Check your Service Key');
          break;
        case 403:
          console.error('Forbidden: Insufficient permissions');
          break;
        case 404:
          console.error('Not Found: Resource does not exist');
          break;
        case 429:
          console.error('Rate Limited: Too many requests');
          break;
        case 500:
          console.error('Server Error: Try again later');
          break;
        default:
          console.error(`Error ${error.response.status}:`, error.response.data);
      }
    } else if (error.request) {
      // The request was made but no response was received
      console.error('No response received:', error.message);
    } else {
      // Something happened in setting up the request
      console.error('Request error:', error.message);
    }
    throw error;
  }
}

// Usage with async/await
async function main() {
  try {
    const prompts = await makeStudioRequest('/tenants/tenant_123/prompts');
    console.log('Success:', prompts);
  } catch (error) {
    console.error('Operation failed');
  }
}

main();