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 axiosCreate 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();