Authentication
Get Current User
Copy
import { client } from '@getgraniteai/ts-sdk';
const user = await client.getCurrentUser();
console.log(`Logged in as: ${user.email}`);
console.log(`Organization: ${user.organization_name}`);
List Organizations
Copy
const orgs = await client.listOrganizations();
for (const org of orgs) {
console.log(`${org.name} (${org.slug})`);
}
Processes
List All Processes
Copy
const jobs = await client.listWorkflowJobs();
for (const job of jobs) {
console.log(`${job.name} - ${job.status}`);
}
Get Process Details
Copy
const job = await client.getWorkflowJob({
jobId: 'job_abc123',
});
console.log(job.name);
console.log(job.description);
Running Automations
Trigger via API Endpoint
Copy
// Using the public endpoint invocation
const result = await client.invokeOrgEndpoint({
orgIdentifier: 'your-org',
slug: 'your-endpoint',
body: {
param1: 'value1',
param2: 'value2',
},
});
console.log(`Run ID: ${result.runId}`);
console.log(`Status: ${result.status}`);
Check Run Status
Copy
const run = await client.getAgentRun({
runId: 'run_abc123',
});
console.log(`Status: ${run.status}`);
console.log(`Duration: ${run.duration}ms`);
List Recent Runs
Copy
const runs = await client.listAgentRuns({
limit: 10,
offset: 0,
});
for (const run of runs.items) {
console.log(`${run.id} - ${run.status} - ${run.created_at}`);
}
API Keys
Create API Key
Copy
const key = await client.createApiKey({
organizationId: 'org_123',
name: 'Production Backend',
});
// Save this immediately - only shown once!
console.log(`API Key: ${key.key}`);
List API Keys
Copy
const keys = await client.listApiKeys({
organizationId: 'org_123',
});
for (const key of keys) {
console.log(`${key.name} - Created: ${key.created_at}`);
}
Revoke API Key
Copy
await client.revokeApiKey({
organizationId: 'org_123',
keyId: 'key_abc',
});
console.log('Key revoked');
Analytics
Get Batched Analytics
Copy
const analytics = await client.getBatchedAnalytics({
timeRange: '7d',
granularity: 'daily',
});
console.log(`Total executions: ${analytics.summary.total_executions}`);
console.log(`Success rate: ${analytics.summary.success_rate}%`);
Get Executions Over Time
Copy
const data = await client.getExecutionsOverTime({
timeRange: '30d',
granularity: 'daily',
});
for (const point of data.data) {
console.log(`${point.date}: ${point.count} executions`);
}
Team Management
Invite Member
Copy
await client.inviteMember({
organizationId: 'org_123',
email: '[email protected]',
role: 'member',
});
console.log('Invitation sent');
Update Member Role
Copy
await client.updateMemberRole({
organizationId: 'org_123',
memberId: 'mem_456',
role: 'admin',
});
Error Handling Pattern
Copy
async function safeApiCall<T>(
operation: () => Promise<T>
): Promise<T | null> {
try {
return await operation();
} catch (error) {
if (error.status === 401) {
// Handle unauthorized - redirect to login
window.location.href = '/login';
} else if (error.status === 429) {
// Handle rate limit - wait and retry
await new Promise(r => setTimeout(r, 5000));
return safeApiCall(operation);
} else {
console.error('API Error:', error.message);
}
return null;
}
}
// Usage
const user = await safeApiCall(() => client.getCurrentUser());
Polling Pattern
Copy
async function waitForCompletion(runId: string): Promise<AgentRun> {
while (true) {
const run = await client.getAgentRun({ runId });
if (['completed', 'failed', 'cancelled'].includes(run.status)) {
return run;
}
// Wait 2 seconds before checking again
await new Promise(r => setTimeout(r, 2000));
}
}
// Usage
const result = await waitForCompletion('run_abc123');
console.log(`Final status: ${result.status}`);