close
$
npx mdskill add vm0-ai/vm0-skills/closeExecute Close CRM API calls to manage sales leads and pipeline data.
- Retrieves and creates lead records within the sales pipeline.
- Depends on the Close CRM API and requires a valid authentication token.
- Triggers on user mentions of sales management or specific CRM terms.
- Returns structured JSON data containing lead details and organization info.
SKILL.md
.github/skills/closeView on GitHub ↗
---
name: close
description: Close CRM API for sales management. Use when user mentions "Close CRM",
"Close.io", "sales leads", or asks about sales pipeline.
---
## Troubleshooting
If requests fail, run `zero doctor check-connector --env-name CLOSE_TOKEN` or `zero doctor check-connector --url https://api.close.com/api/v1/me/ --method GET`
## Core APIs
### Get Current User
```bash
curl -s "https://api.close.com/api/v1/me/" --header "Authorization: Bearer $CLOSE_TOKEN" | jq '{id, email, first_name, last_name}'
```
### Get Organization Info
```bash
curl -s "https://api.close.com/api/v1/organization/" --header "Authorization: Bearer $CLOSE_TOKEN" | jq '.data[0] | {id, name}'
```
### List Users
```bash
curl -s "https://api.close.com/api/v1/user/" --header "Authorization: Bearer $CLOSE_TOKEN" | jq '.data[] | {id, email, first_name, last_name}'
```
## Leads
### List Leads
```bash
curl -s "https://api.close.com/api/v1/lead/?_limit=10" --header "Authorization: Bearer $CLOSE_TOKEN" | jq '.data[] | {id, display_name, status_label, created_by_name}'
```
### Get a Lead
```bash
curl -s "https://api.close.com/api/v1/lead/<lead-id>/" --header "Authorization: Bearer $CLOSE_TOKEN" | jq '{id, display_name, status_label, contacts, opportunities}'
```
### Create a Lead
Write to `/tmp/request.json`:
```json
{
"name": "Acme Corp",
"contacts": [
{
"name": "Jane Smith",
"emails": [
{
"type": "office",
"email": "jane@acme.com"
}
],
"phones": [
{
"type": "office",
"phone": "+14155551234"
}
]
}
]
}
```
```bash
curl -s -X POST "https://api.close.com/api/v1/lead/" --header "Authorization: Bearer $CLOSE_TOKEN" --header "Content-Type: application/json" -d @/tmp/request.json | jq '{id, display_name}'
```
### Update a Lead
Write to `/tmp/request.json`:
```json
{
"name": "Acme Corporation"
}
```
```bash
curl -s -X PUT "https://api.close.com/api/v1/lead/<lead-id>/" --header "Authorization: Bearer $CLOSE_TOKEN" --header "Content-Type: application/json" -d @/tmp/request.json | jq '{id, display_name}'
```
### Delete a Lead
```bash
curl -s -X DELETE "https://api.close.com/api/v1/lead/<lead-id>/" --header "Authorization: Bearer $CLOSE_TOKEN"
```
## Contacts
### List Contacts
```bash
curl -s "https://api.close.com/api/v1/contact/?_limit=10" --header "Authorization: Bearer $CLOSE_TOKEN" | jq '.data[] | {id, name, lead_id, emails, phones}'
```
### Get a Contact
```bash
curl -s "https://api.close.com/api/v1/contact/<contact-id>/" --header "Authorization: Bearer $CLOSE_TOKEN" | jq '{id, name, title, lead_id, emails, phones}'
```
### Create a Contact
Write to `/tmp/request.json`:
```json
{
"lead_id": "<lead-id>",
"name": "John Doe",
"title": "VP of Engineering",
"emails": [
{
"type": "office",
"email": "john@acme.com"
}
],
"phones": [
{
"type": "mobile",
"phone": "+14155559876"
}
]
}
```
```bash
curl -s -X POST "https://api.close.com/api/v1/contact/" --header "Authorization: Bearer $CLOSE_TOKEN" --header "Content-Type: application/json" -d @/tmp/request.json | jq '{id, name, lead_id}'
```
### Update a Contact
Write to `/tmp/request.json`:
```json
{
"title": "CTO"
}
```
```bash
curl -s -X PUT "https://api.close.com/api/v1/contact/<contact-id>/" --header "Authorization: Bearer $CLOSE_TOKEN" --header "Content-Type: application/json" -d @/tmp/request.json | jq '{id, name, title}'
```
### Delete a Contact
```bash
curl -s -X DELETE "https://api.close.com/api/v1/contact/<contact-id>/" --header "Authorization: Bearer $CLOSE_TOKEN"
```
## Opportunities
### List Opportunities
```bash
curl -s "https://api.close.com/api/v1/opportunity/?_limit=10" --header "Authorization: Bearer $CLOSE_TOKEN" | jq '.data[] | {id, lead_name, status_label, status_type, value, value_currency}'
```
### Get an Opportunity
```bash
curl -s "https://api.close.com/api/v1/opportunity/<opportunity-id>/" --header "Authorization: Bearer $CLOSE_TOKEN" | jq '{id, lead_name, status_label, status_type, value, value_currency, confidence, note}'
```
### Create an Opportunity
First, list available opportunity statuses to get a valid `status_id`:
```bash
curl -s "https://api.close.com/api/v1/status/opportunity/" --header "Authorization: Bearer $CLOSE_TOKEN" | jq '.data[] | {id, label, type}'
```
Write to `/tmp/request.json`:
```json
{
"lead_id": "<lead-id>",
"status_id": "<status-id>",
"value": 5000,
"value_currency": "USD",
"note": "Enterprise license deal",
"confidence": 75
}
```
```bash
curl -s -X POST "https://api.close.com/api/v1/opportunity/" --header "Authorization: Bearer $CLOSE_TOKEN" --header "Content-Type: application/json" -d @/tmp/request.json | jq '{id, lead_name, status_label, value}'
```
### Update an Opportunity
Write to `/tmp/request.json`:
```json
{
"value": 10000,
"confidence": 90
}
```
```bash
curl -s -X PUT "https://api.close.com/api/v1/opportunity/<opportunity-id>/" --header "Authorization: Bearer $CLOSE_TOKEN" --header "Content-Type: application/json" -d @/tmp/request.json | jq '{id, status_label, value, confidence}'
```
### Delete an Opportunity
```bash
curl -s -X DELETE "https://api.close.com/api/v1/opportunity/<opportunity-id>/" --header "Authorization: Bearer $CLOSE_TOKEN"
```
## Tasks
### List Tasks
```bash
curl -s "https://api.close.com/api/v1/task/?_limit=10&is_complete=false" --header "Authorization: Bearer $CLOSE_TOKEN" | jq '.data[] | {id, _type, text, date, is_complete, assigned_to_name, lead_name}'
```
### Get a Task
```bash
curl -s "https://api.close.com/api/v1/task/<task-id>/" --header "Authorization: Bearer $CLOSE_TOKEN" | jq '{id, _type, text, date, is_complete, lead_name}'
```
### Create a Task
Write to `/tmp/request.json`:
```json
{
"_type": "lead",
"lead_id": "<lead-id>",
"text": "Follow up on proposal",
"date": "2026-03-15",
"assigned_to": "<user-id>"
}
```
```bash
curl -s -X POST "https://api.close.com/api/v1/task/" --header "Authorization: Bearer $CLOSE_TOKEN" --header "Content-Type: application/json" -d @/tmp/request.json | jq '{id, text, date, is_complete}'
```
### Complete a Task
Write to `/tmp/request.json`:
```json
{
"is_complete": true
}
```
```bash
curl -s -X PUT "https://api.close.com/api/v1/task/<task-id>/" --header "Authorization: Bearer $CLOSE_TOKEN" --header "Content-Type: application/json" -d @/tmp/request.json | jq '{id, text, is_complete}'
```
### Delete a Task
```bash
curl -s -X DELETE "https://api.close.com/api/v1/task/<task-id>/" --header "Authorization: Bearer $CLOSE_TOKEN"
```
## Activities
### List Activities
Filter by type: `Call`, `Email`, `EmailThread`, `Note`, `Meeting`, `SMS`, `LeadStatusChange`, `OpportunityStatusChange`, `TaskCompleted`.
```bash
curl -s "https://api.close.com/api/v1/activity/?_limit=10" --header "Authorization: Bearer $CLOSE_TOKEN" | jq '.data[] | {id, _type, lead_id, date_created}'
```
### List Activities for a Lead
```bash
curl -s "https://api.close.com/api/v1/activity/?lead_id=<lead-id>&_limit=10" --header "Authorization: Bearer $CLOSE_TOKEN" | jq '.data[] | {id, _type, date_created}'
```
### Create a Note Activity
Write to `/tmp/request.json`:
```json
{
"lead_id": "<lead-id>",
"note": "Had a productive call with the team. They are interested in the enterprise plan."
}
```
```bash
curl -s -X POST "https://api.close.com/api/v1/activity/note/" --header "Authorization: Bearer $CLOSE_TOKEN" --header "Content-Type: application/json" -d @/tmp/request.json | jq '{id, note, date_created}'
```
## Lead Statuses
### List Lead Statuses
```bash
curl -s "https://api.close.com/api/v1/status/lead/" --header "Authorization: Bearer $CLOSE_TOKEN" | jq '.data[] | {id, label}'
```
## Pipelines
### List Pipelines
```bash
curl -s "https://api.close.com/api/v1/pipeline/" --header "Authorization: Bearer $CLOSE_TOKEN" | jq '.data[] | {id, name}'
```
## Guidelines
1. All API endpoints use the base URL `https://api.close.com/api/v1/`
2. Authentication uses Bearer token: `--header "Authorization: Bearer $CLOSE_TOKEN"`
3. Leads are the primary object — contacts, opportunities, tasks, and activities all belong to leads
4. Use `_limit` and `_skip` query parameters for pagination (default limit is 100, max is 200)
5. When creating contacts, always provide a `lead_id` to associate them with an existing lead
6. Opportunity statuses have a `status_type` of `active`, `won`, or `lost` — list available statuses before creating opportunities
7. Tasks support types: `lead` (general) and `outgoing_call` — use `lead` type for most tasks
8. Use `_fields` query parameter to select specific fields and reduce response size
More from vm0-ai/vm0-skills
- account-reconciliationPerform account reconciliations comparing general ledger balances against subledgers, bank statements, or external records. Use for bank reconciliation, GL-to-subledger reconciliation, intercompany reconciliation, balance sheet reconciliation, reconciling item analysis, outstanding item aging, or clearing open items.
- agentphoneBuild AI phone agents with AgentPhone API. Use when the user wants to make phone calls, send/receive SMS, manage phone numbers, create voice agents, set up webhooks, or check usage — anything related to telephony, phone numbers, or voice AI.
- ahrefsAhrefs SEO API for backlink and keyword analysis. Use when user mentions
- amplitudeAmplitude product analytics API. Use when user mentions "Amplitude",
- analysis-qaQuality-check a data analysis before sharing — verify joins, aggregations, denominators, time ranges, and metric definitions. Detect pitfalls like survivorship bias, average-of-averages, join explosion, timezone mismatches, incomplete periods, and selection bias. Includes documentation templates for reproducible analyses.
- anthropic-managed-agentsAnthropic Managed Agents API for programmatically creating, running, and streaming AI agents on Anthropic's cloud infrastructure. Use when the user mentions "Managed Agents", "Anthropic agent sessions", or needs to create/run/stream an Anthropic agent with tool use (bash, git, web), attach GitHub repositories, or inject secrets via Vault. Do NOT use for standard Claude Messages API — use the Claude API skill instead.
- apifyApify web scraping platform. Use when user mentions "scrape website",
- asanaAsana API for tasks and projects. Use when user mentions "Asana", "asana.com",
- atlassianAtlassian API for Confluence and Jira. Use when user mentions "Confluence
- attioAttio REST API for AI-native CRM operations — manage companies, people, deals, and custom objects, plus notes, tasks, lists, and comments. Use when the user mentions "Attio", "CRM record", "create company", "add person", "list entry", "CRM note", or "CRM task".