Skip to content
OpenSmartRoute
Skillv1.0.0

instantly-hello-world

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

by jeremylongshore(0) 0 installs
Free
Sign in to install

Free account. Installing gives you the manifest plus copy-paste snippets.

See reviews

About

Imported from jeremylongshore/tons-of-skills-marketplace (skills/.curated/instantly-hello-world/SKILL.md). Install upstream with npx skills add jeremylongshore/tons-of-skills-marketplace --skill instantly-hello-world. Copyright stays with the author (MIT).

Instantly Hello World

Overview

Minimal working example that lists your campaigns, checks email account health, and pulls campaign analytics — all using real Instantly API v2 endpoints.

Prerequisites

  • Completed instantly-install-auth setup
  • At least one email account connected in Instantly
  • INSTANTLY_API_KEY environment variable set

Instructions

Step 1: List Your Campaigns

import { 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;
}

Step 2: Check Email Account Health

interface 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));
  }
}

Step 3: Pull Campaign Analytics

async 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}`);
}

Step 4: Run It All

async 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);

Quick Test with curl

set -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}'

Output

  • List of campaigns with names and statuses
  • Email account health overview
  • Campaign analytics summary (open rate, reply rate, bounce count)
  • Confirmation that Instantly API v2 is reachable

Error Handling

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

Examples

Create a draft with a fictional recipient fixture and record campaign=hello-sandbox; recipients=synthetic-only; consent=pass; suppression=pass; sends=0; cleanup=complete.

Resources

Next Steps

Proceed to instantly-core-workflow-a to build a full campaign launch workflow.

Use it

Copy one of these into your project. Installing also returns the manifest and these snippets.

yaml
targets:
  - https://api.opensmartroute.ai/api/v1/registry/jeremylongshore-tons-of-skills-marketplace-instantly-hel-c8925e/manifest   # or paste the manifest below

Manifest

An Open Capability Manifest: the router reads it to know what this does, what it costs and when to pick it.

jeremylongshore-tons-of-skills-marketplace-instantly-hel-c8925e.ocm.jsonjson
{
  "ocm": "1",
  "id": "jeremylongshore-tons-of-skills-marketplace-instantly-hel-c8925e",
  "kind": "skill",
  "name": "instantly-hello-world",
  "description": "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\".",
  "publisher": "jeremylongshore",
  "version": "1.0.0",
  "capabilities": {
    "domains": [
      "coding",
      "general_chat"
    ],
    "tags": [
      "skill-md",
      "saas",
      "instantly",
      "api",
      "getting-started",
      "skills-sh"
    ],
    "languages": [
      "en"
    ]
  },
  "quality_prior": 0.6,
  "examples": [
    "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\"."
  ],
  "primary": false,
  "metadata": {
    "source": {
      "provider": "skills.sh",
      "repository": "https://github.com/jeremylongshore/tons-of-skills-marketplace",
      "path": "skills/.curated/instantly-hello-world/SKILL.md",
      "ref": "HEAD",
      "url": "https://github.com/jeremylongshore/tons-of-skills-marketplace/blob/HEAD/skills/.curated/instantly-hello-world/SKILL.md",
      "key": "jeremylongshore/tons-of-skills-marketplace/skills/.curated/instantly-hello-world/SKILL.md"
    },
    "compatibility": "Designed for Claude Code",
    "allowed_tools": [
      "Read,",
      "Write,",
      "Edit,",
      "Bash(npm:*),",
      "Bash(curl:*)"
    ],
    "license": "MIT"
  },
  "instructions": "# Instantly Hello World\n\n## Overview\n\nMinimal working example that lists your campaigns, checks email account health, and pulls campaign analytics — all using real Instantly API v2 endpoints.\n\n## Prerequisites\n\n- Completed `instantly-install-auth` setup\n- At least one email account connected in Instantly\n- `INSTANTLY_API_KEY` environment variable set\n\n## Instructions\n\n### Step 1: List Your Campaigns\n\n```typescript\nimport { instantly } from \"./src/instantly\";\n\ninterface Campaign {\n  id: string;\n  name: string;\n  status: number; // 0=Draft, 1=Active, 2=Paused, 3=Completed\n}\n\nconst STATUS_LABELS:",
  "cost": {
    "context_tokens": 1120
  }
}

Fetch it by URL: GET /api/v1/registry/jeremylongshore-tons-of-skills-marketplace-instantly-hel-c8925e/manifest?version=1.0.0

Reviews

Star ratings from people who tried it. One review per account; edit yours any time.

No reviews yet. Install it, try it, and be the first to rate it.