Agent Skills: Instantly API

Instantly.ai API via curl. Use this skill for cold email outreach automation, managing campaigns, leads, and email accounts.

UncategorizedID: vm0-ai/vm0-skills/instantly

Skill Files

Browse the full folder contents for instantly.

Download Skill

Loading file tree…

instantly/SKILL.md

Skill Metadata

Name
instantly
Description
Instantly.ai API via curl. Use this skill for cold email outreach automation, managing campaigns, leads, and email accounts.

Instantly API

Use the Instantly API via direct curl calls to automate cold email outreach, manage campaigns, leads, and sending accounts.

Official docs: https://developer.instantly.ai/


When to Use

Use this skill when you need to:

  • Manage email campaigns - create, launch, pause campaigns
  • Handle leads - add, update, list leads in campaigns
  • Manage sending accounts - list and configure email accounts
  • Automate outreach - schedule sends and manage lead lists

Prerequisites

  1. Sign up at Instantly.ai (Growth plan or above required for API)
  2. Go to Settings > Integrations > API to create an API key
  3. Select appropriate scopes for your use case
export INSTANTLY_API_KEY="your-api-key"

API Scopes

Create API keys with specific permissions:

  • campaigns:read, campaigns:create, campaigns:update
  • leads:read, leads:create, leads:update, leads:delete
  • lead_lists:read, lead_lists:create
  • analytics:read
  • all:all (full access)

Important: When using $VAR in a command that pipes to another command, wrap the command containing $VAR in bash -c '...'. Due to a Claude Code bug, environment variables are silently cleared when pipes are used directly.

bash -c 'curl -s "https://api.example.com" -H "Authorization: Bearer $API_KEY"' | jq '.items[] | {id, name}'

How to Use

All examples below assume you have INSTANTLY_API_KEY set.

The base URL for API V2 is:

  • https://api.instantly.ai/api/v2

Authentication uses Bearer token in the Authorization header.


1. List Campaigns

Get all campaigns:

bash -c 'curl -s "https://api.instantly.ai/api/v2/campaigns" -H "Authorization: Bearer ${INSTANTLY_API_KEY}"' | jq '.items[] | {id, name, status}'

With filters:

bash -c 'curl -s "https://api.instantly.ai/api/v2/campaigns?status=ACTIVE&limit=10" -H "Authorization: Bearer ${INSTANTLY_API_KEY}"' | jq '.items[] | {id, name}'

Status values: ACTIVE, PAUSED, COMPLETED, DRAFTED


2. Get Single Campaign

Get campaign details by ID. Replace <your-campaign-id> with the actual campaign ID:

bash -c 'curl -s "https://api.instantly.ai/api/v2/campaigns/<your-campaign-id>" -H "Authorization: Bearer ${INSTANTLY_API_KEY}"' | jq '{id, name, status, daily_limit}'

3. Create Campaign

Create a new campaign (requires campaign_schedule):

Write to /tmp/instantly_request.json:

{
  "name": "My New Campaign",
  "daily_limit": 50,
  "campaign_schedule": {
    "schedules": [
      {
        "name": "Weekday Schedule",
        "timezone": "America/Chicago",
        "days": {
          "monday": true,
          "tuesday": true,
          "wednesday": true,
          "thursday": true,
          "friday": true,
          "saturday": false,
          "sunday": false
        },
        "timing": {
          "from": "09:00",
          "to": "17:00"
        }
      }
    ]
  }
}

Then run:

bash -c 'curl -s "https://api.instantly.ai/api/v2/campaigns" -X POST -H "Authorization: Bearer ${INSTANTLY_API_KEY}" -H "Content-Type: application/json" -d @/tmp/instantly_request.json'

4. Pause/Activate Campaign

Control campaign status. Replace <your-campaign-id> with the actual campaign ID:

# Pause campaign
bash -c 'curl -s "https://api.instantly.ai/api/v2/campaigns/<your-campaign-id>/pause" -X POST -H "Authorization: Bearer ${INSTANTLY_API_KEY}"'

# Activate campaign
bash -c 'curl -s "https://api.instantly.ai/api/v2/campaigns/<your-campaign-id>/activate" -X POST -H "Authorization: Bearer ${INSTANTLY_API_KEY}"'

5. List Leads

List leads (POST endpoint due to complex filters):

Write to /tmp/instantly_request.json:

{
  "limit": 10
}

Then run:

bash -c 'curl -s "https://api.instantly.ai/api/v2/leads/list" -X POST -H "Authorization: Bearer ${INSTANTLY_API_KEY}" -H "Content-Type: application/json" -d @/tmp/instantly_request.json' | jq '.items[] | {id, email, first_name, last_name}'

Filter by campaign:

Write to /tmp/instantly_request.json:

{
  "campaign_id": "your-campaign-id",
  "limit": 20
}

Then run:

bash -c 'curl -s "https://api.instantly.ai/api/v2/leads/list" -X POST -H "Authorization: Bearer ${INSTANTLY_API_KEY}" -H "Content-Type: application/json" -d @/tmp/instantly_request.json' | jq '.items[] | {email, status}'

6. Create Lead

Add a single lead:

Write to /tmp/instantly_request.json:

{
  "email": "john@example.com",
  "first_name": "John",
  "last_name": "Doe",
  "company_name": "Acme Corp",
  "campaign_id": "your-campaign-id"
}

Then run:

bash -c 'curl -s "https://api.instantly.ai/api/v2/leads" -X POST -H "Authorization: Bearer ${INSTANTLY_API_KEY}" -H "Content-Type: application/json" -d @/tmp/instantly_request.json'

With custom variables:

Write to /tmp/instantly_request.json:

{
  "email": "jane@example.com",
  "first_name": "Jane",
  "campaign_id": "your-campaign-id",
  "custom_variables": {
    "role": "CTO",
    "industry": "SaaS"
  }
}

Then run:

bash -c 'curl -s "https://api.instantly.ai/api/v2/leads" -X POST -H "Authorization: Bearer ${INSTANTLY_API_KEY}" -H "Content-Type: application/json" -d @/tmp/instantly_request.json'

7. Get Single Lead

Get lead by ID. Replace <your-lead-id> with the actual lead ID:

bash -c 'curl -s "https://api.instantly.ai/api/v2/leads/<your-lead-id>" -H "Authorization: Bearer ${INSTANTLY_API_KEY}"'

8. Update Lead

Update lead information:

Write to /tmp/instantly_request.json:

{
  "first_name": "Updated Name",
  "custom_variables": {
    "notes": "High priority"
  }
}

Then run. Replace <your-lead-id> with the actual lead ID:

bash -c 'curl -s "https://api.instantly.ai/api/v2/leads/<your-lead-id>" -X PATCH -H "Authorization: Bearer ${INSTANTLY_API_KEY}" -H "Content-Type: application/json" -d @/tmp/instantly_request.json'

9. List Lead Lists

Get all lead lists:

bash -c 'curl -s "https://api.instantly.ai/api/v2/lead-lists" -H "Authorization: Bearer ${INSTANTLY_API_KEY}"' | jq '.items[] | {id, name}'

10. Create Lead List

Create a new lead list:

Write to /tmp/instantly_request.json:

{
  "name": "Q1 Prospects"
}

Then run:

bash -c 'curl -s "https://api.instantly.ai/api/v2/lead-lists" -X POST -H "Authorization: Bearer ${INSTANTLY_API_KEY}" -H "Content-Type: application/json" -d @/tmp/instantly_request.json'

11. List Email Accounts

Get connected sending accounts:

bash -c 'curl -s "https://api.instantly.ai/api/v2/accounts" -H "Authorization: Bearer ${INSTANTLY_API_KEY}"' | jq '.items[] | {email, status, warmup_status}'

12. Test API Key

Verify your API key is valid:

bash -c 'curl -s "https://api.instantly.ai/api/v2/api-keys" -H "Authorization: Bearer ${INSTANTLY_API_KEY}"' | jq '.items[0] | {name, scopes}'

Pagination

List endpoints support pagination:

# First page
bash -c 'curl -s "https://api.instantly.ai/api/v2/campaigns?limit=10" -H "Authorization: Bearer ${INSTANTLY_API_KEY}"' | jq '{items: .items | length, next_starting_after: .next_starting_after}'

# Next page (replace <your-cursor> with the next_starting_after value from the previous response)
bash -c 'curl -s "https://api.instantly.ai/api/v2/campaigns?limit=10&starting_after=<your-cursor>" -H "Authorization: Bearer ${INSTANTLY_API_KEY}"' | jq '.items[] | {id, name}'

Guidelines

  1. Use API V2: V1 is deprecated, use V2 endpoints only
  2. Bearer token auth: Always use Authorization: Bearer header
  3. Scope your keys: Create keys with minimal required permissions
  4. Custom variables: Values must be string, number, boolean, or null (no objects/arrays)
  5. Leads list is POST: Due to complex filters, listing leads uses POST not GET
  6. Rate limits: Respect rate limits based on your plan tier
  7. Growth plan required: API access requires Growth plan or above