Installation
npm install mindcase
Quick Start
import { Mindcase } from 'mindcase';
const client = new Mindcase({ apiKey: 'mk_live_abc123def456' });
// Check credits
const balance = await client.credits();
console.log(`Credits: ${balance}`);
// Run an agent and get results (awaits until done)
const results = await client.run('instagram/profiles', {
params: { usernames: ['nike', 'adidas'] }
});
console.log(`Got ${results.rowCount} profiles`);
for (const row of results) {
console.log(`${row.Username}: ${row.Followers} followers`);
}
Client Setup
import { Mindcase } from 'mindcase';
const client = new Mindcase({
apiKey: 'mk_live_abc123def456', // or set MINDCASE_API_KEY env var
baseUrl: 'https://api.mindcase.co/api/v1', // default
timeout: 30000, // HTTP request timeout in ms
pollInterval: 3000, // ms between status polls (for run())
runTimeout: 300000, // max ms run() will wait
});
// Or just set the env var and omit apiKey
// process.env.MINDCASE_API_KEY = 'mk_live_...'
const client2 = new Mindcase();
Discover Agents
// List all agents across all platforms
const allAgents = await client.agents.list();
for (const a of allAgents) {
console.log(`${a.path}: ${a.name} (${a.creditsPerRow} credits/row)`);
}
// Filter to a specific platform
const igAgents = await client.agents.list('instagram');
// Get full details + parameters for a specific agent
const agent = await client.agents.get('instagram/profiles');
console.log(agent.name); // "Instagram Profiles"
console.log(agent.requiredParams); // { usernames: Parameter }
console.log(agent.creditsPerRow); // 1
Run an Agent (Sync)
Awaits until the job completes and returns results directly.const results = await client.run('instagram/profiles', {
params: { usernames: ['nike', 'adidas'] }
});
console.log(`Got ${results.rowCount} rows`);
console.log(`Columns: ${results.columns}`);
for (const row of results) {
console.log(row);
}
// Override timeout per-call
const places = await client.run('google-maps/businesses', {
params: {
searchStringsArray: ['gym'],
locationQuery: 'Delhi, India',
maxCrawledPlacesPerSearch: 50
},
timeout: 120000,
pollInterval: 5000,
onStatus: (job) => console.log(`Status: ${job.status}`)
});
Run an Agent (Async)
Returns immediately with a Job object. Useclient.jobs.* to manage it.
const job = await client.runAsync('instagram/profiles', {
params: { usernames: ['nike', 'adidas'] }
});
console.log(job.id); // "job_abc123"
console.log(job.status); // "queued"
// ... do other work ...
// Check status later
const updated = await client.jobs.get(job.id);
if (updated.isDone) {
const results = await client.jobs.results(job.id);
console.log(results.data);
}
Manage Jobs
// List all jobs
const jobs = await client.jobs.list();
// Filter by status
const completed = await client.jobs.list({ status: 'completed', limit: 10 });
// Get status
const job = await client.jobs.get('job_abc123');
console.log(job.status); // "completed"
console.log(job.rowCount); // 3
console.log(job.creditsUsed); // 3
// Get results
const results = await client.jobs.results('job_abc123');
console.log(results.columns); // ['Username', 'Followers', ...]
console.log(results.toList('Username')); // ['nike', 'adidas']
console.log(results.data[0]); // first row as object
// Cancel a running job
await client.jobs.cancel('job_abc123');
Check Credits
const balance = await client.credits();
console.log(`Credits remaining: ${balance}`);
Error Handling
import {
Mindcase,
AuthenticationError,
InsufficientCreditsError,
NotFoundError,
RateLimitError,
ValidationError,
} from 'mindcase';
const client = new Mindcase({ apiKey: 'mk_live_abc123def456' });
try {
const results = await client.run('instagram/profiles', {
params: { usernames: ['nike'] }
});
} catch (err) {
if (err instanceof AuthenticationError) {
console.log('Invalid API key');
} else if (err instanceof InsufficientCreditsError) {
console.log(`Need more credits: ${err.message}`);
} else if (err instanceof RateLimitError) {
console.log('Too many requests, slow down');
} else if (err instanceof ValidationError) {
console.log(`Bad parameters: ${err.message}`);
} else if (err instanceof NotFoundError) {
console.log('Agent not found');
}
}
| Exception | HTTP Code | When |
|---|---|---|
AuthenticationError | 401 | Invalid or missing API key |
InsufficientCreditsError | 402 | Not enough credits |
NotFoundError | 404 | Agent or job doesn’t exist |
ValidationError | 422 | Missing or invalid parameters |
RateLimitError | 429 | Exceeded 60 requests/minute |
Full Example
import { Mindcase } from 'mindcase';
const client = new Mindcase({ apiKey: 'mk_live_abc123def456' });
// 1. Check credits
const balance = await client.credits();
console.log(`Credits: ${balance}`);
// 2. Browse agents
const agents = await client.agents.list('google-maps');
for (const a of agents) {
console.log(` ${a.path}: ${a.name} (${a.creditsPerRow} credits/row)`);
}
// 3. Run a search
const results = await client.run('google-maps/businesses', {
params: {
searchStringsArray: ['coffee shop'],
locationQuery: 'Mumbai, India',
maxCrawledPlacesPerSearch: 20
},
onStatus: (job) => console.log(`Status: ${job.status}`)
});
// 4. Process results
console.log(`\nFound ${results.rowCount} coffee shops:`);
for (const place of results) {
const name = place.title ?? 'Unknown';
const rating = place.totalScore ?? 'N/A';
const reviews = place.reviewsCount ?? 0;
console.log(` ${name} — ${rating} stars (${reviews} reviews)`);
}