Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Create a minimal working Instantly.ai example with real API calls. Use when starting a new Instantly integration, testing your setup, or learning basic Instantly API v2 patterns. Trigger with phrases like "instantly hello world", "instantly example", "instantly quick start", "simple instantly code", "test instantly api".
.claude/skills/jeremylongshore-instantly-hello-world/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-16 | ✗→✓ | ▲ Improved | 32% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 24% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 14% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 61% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 43% | 0% |
Minimal working example that lists your campaigns, checks email account health, and pulls campaign analytics — all using real Instantly API v2 endpoints.
instantly-install-auth setupINSTANTLY_API_KEY environment variable settypescriptimport { instantly } from "./src/instantly"; interface Campaign { id: string; name: string; status: number; // 0=Draft, 1=Active, 2=Paused, 3=Completed } const STATUS_LABELS: Record<number, string> = { 0: "Draft", 1: "Active", 2: "Paused", 3: "Completed", 4: "Running Subsequences", [-99]: "Suspended", [-1]: "Accounts Unhealthy", [-2]: "Bounce Protect", }; async function listCampaigns() { const campaigns = await instantly<Campaign[]>("/campaigns?limit=10"); console.log(`Found ${campaigns.length} campaigns:\n`); for (const c of campaigns) { console.log(` ${c.name} [${STATUS_LABELS[c.status] ?? c.status}] — ${c.id}`); } return campaigns; }
typescriptinterface Account { email: string; status: number; warmup_status: string; daily_limit: number | null; } async function checkAccounts() { const accounts = await instantly<Account[]>("/accounts?limit=5"); console.log(`\nEmail Accounts (${accounts.length}):`); for (const a of accounts) { console.log(` ${a.email} — status: ${a.status}, warmup: ${a.warmup_status}, daily_limit: ${a.daily_limit}`); } // Test vitals for the first account if (accounts.length > 0) { const vitals = await instantly("/accounts/test/vitals", { method: "POST", body: JSON.stringify({ accounts: [accounts[0].email] }), }); console.log(`\nVitals for ${accounts[0].email}:`, JSON.stringify(vitals, null, 2)); } }
typescriptasync function getAnalytics(campaignId: string) { const stats = await instantly<{ campaign_id: string; total_leads: number; leads_contacted: number; emails_sent: number; emails_opened: number; emails_replied: number; emails_bounced: number; }>(`/campaigns/analytics?id=${campaignId}`); console.log(`\nCampaign Analytics:`); console.log(` Leads: ${stats.total_leads} total, ${stats.leads_contacted} contacted`); console.log(` Sent: ${stats.emails_sent}`); console.log(` Opened: ${stats.emails_opened} (${((stats.emails_opened / stats.emails_sent) * 100).toFixed(1)}%)`); console.log(` Replied: ${stats.emails_replied} (${((stats.emails_replied / stats.emails_sent) * 100).toFixed(1)}%)`); console.log(` Bounced: ${stats.emails_bounced}`); }
typescriptasync function main() { console.log("=== Instantly API v2 Hello World ===\n"); const campaigns = await listCampaigns(); await checkAccounts(); if (campaigns.length > 0) { await getAnalytics(campaigns[0].id); } console.log("\nDone! Your Instantly connection is working."); } main().catch(console.error);
bashset -euo pipefail # List campaigns curl -s https://api.instantly.ai/api/v2/campaigns?limit=3 \ -H "Authorization: Bearer $INSTANTLY_API_KEY" | jq '.[] | {name, status, id}' # List email accounts curl -s https://api.instantly.ai/api/v2/accounts?limit=3 \ -H "Authorization: Bearer $INSTANTLY_API_KEY" | jq '.[] | {email, status}'
| Error | Cause | Solution | |-------|-------|----------| | 401 Unauthorized | Bad API key | Regenerate in Settings > Integrations | | 403 Forbidden | Missing campaigns:read scope | Edit API key scopes | | Empty campaign list | No campaigns created yet | Create one in the Instantly dashboard first | | 429 Too Many Requests | Rate limited | Wait and retry with backoff |
Proceed to instantly-core-workflow-a to build a full campaign launch workflow.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-22 | pass→pass | 17,603 | 21,301 | +21% | 1 | 1 | 0% | 3,492 | 4,510 | +29% | 0 | 0 | — |
case-23 | pass→pass | 23,796 | 19,270 | -19% | 1 | 1 | 0% | 4,026 | 5,573 | +38% | 0 | 0 | — |
case-15 | pass→pass | 16,141 | 16,898 | +5% | 1 | 1 | 0% | 1,997 | 3,510 | +76% | 0 | 0 | — |
case-16 | fail→pass | 9,777 | 5,170 | -47% | 1 | 1 | 0% | 1,697 | 2,245 | +32% | 0 | 0 | — |
case-01 | fail→fail | 23,161 | 23,842 | +3% | 1 | 1 | 0% | 3,595 | 5,464 | +52% | 0 | 0 | — |
case-02 | fail→pass | 23,571 | 20,502 | -13% | 1 | 1 | 0% | 3,861 | 4,785 | +24% | 0 | 0 | — |
case-03 | fail→pass | 14,932 | 11,466 | -23% | 1 | 1 | 0% | 3,352 | 3,821 | +14% | 0 | 0 | — |
case-04 | fail→pass | 15,166 | 14,471 | -5% | 1 | 1 | 0% | 2,077 | 3,352 | +61% | 0 | 0 | — |
case-05 | fail→pass | 14,760 | 6,522 | -56% | 1 | 1 | 0% | 1,698 | 2,425 | +43% | 0 | 0 | — |
case-06 | fail→pass | 14,023 | 9,487 | -32% | 1 | 1 | 0% | 1,702 | 2,152 | +26% | 0 | 0 | — |
case-07 | fail→pass | 12,065 | 12,907 | +7% | 1 | 1 | 0% | 2,298 | 2,588 | +13% | 0 | 0 | — |
case-08 | fail→pass | 12,940 | 16,901 | +31% | 1 | 1 | 0% | 2,451 | 3,540 | +44% | 0 | 0 | — |
case-09 | fail→pass | 15,843 | 10,363 | -35% | 1 | 1 | 0% | 2,065 | 2,130 | +3% | 0 | 0 | — |
case-10 | fail→pass | 13,521 | 2,733 | -80% | 1 | 1 | 0% | 1,574 | 1,679 | +7% | 0 | 0 | — |
case-11 | fail→pass | 10,574 | 7,733 | -27% | 1 | 1 | 0% | 998 | 1,800 | +80% | 0 | 0 | — |
case-12 | pass→pass | 16,118 | 8,674 | -46% | 1 | 1 | 0% | 1,658 | 1,937 | +17% | 0 | 0 | — |
case-13 | pass→pass | 13,423 | 11,140 | -17% | 1 | 1 | 0% | 1,484 | 2,330 | +57% | 0 | 0 | — |
case-14 | pass→pass | 14,557 | 5,292 | -64% | 1 | 1 | 0% | 1,611 | 2,093 | +30% | 0 | 0 | — |
case-17 | fail→pass | 10,488 | 9,104 | -13% | 1 | 1 | 0% | 1,462 | 1,779 | +22% | 0 | 0 | — |
case-18 | fail→pass | 14,891 | 9,186 | -38% | 1 | 1 | 0% | 2,791 | 1,993 | -29% | 0 | 0 | — |
case-19 | pass→pass | 9,377 | 1,528 | -84% | 1 | 1 | 0% | 754 | 1,527 | +103% | 0 | 0 | — |
case-20 | fail→pass | 9,269 | 5,716 | -38% | 1 | 1 | 0% | 1,566 | 2,470 | +58% | 0 | 0 | — |
case-21 | pass→pass | 14,209 | 14,595 | +3% | 1 | 1 | 0% | 2,958 | 4,328 | +46% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 23 cases were attempted. The headline lift of +61 percentage points is the difference between those two pass rates over the 23 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.