PerfexCRM API Skill
Manage your entire PerfexCRM installation through conversation. This skill connects to the PerfexCRM API & Webhooks module, giving you access to 170 API endpoints across 19 resources.
Get the API module: https://perfexapi.com
Environment Variables
Set these before using the skill:
export PERFEXCRM_API_URL="https://your-crm.com/api/v1"
export PERFEXCRM_API_KEY="your-api-key-here"
PERFEXCRM_API_URL: Your PerfexCRM installation URL with/api/v1suffixPERFEXCRM_API_KEY: API key created in PerfexCRM Admin > Setup > API & Webhooks > API Keys
Authentication
All requests use the X-API-KEY header. The key controls which resources and operations are available.
Available Resources (19)
| Resource | List | Get | Create | Update | Delete | Sub-resources |
|---|---|---|---|---|---|---|
| Customers | ✅ | ✅ | ✅ | ✅ | ✅ | contacts, invoices, estimates, projects, contracts, tickets |
| Invoices | ✅ | ✅ | ✅ | ✅ | ✅ | payments (paginated) |
| Leads | ✅ | ✅ | ✅ | ✅ | ✅ | activity_log, proposals |
| Tickets | ✅ | ✅ | ✅ | ✅ | ✅ | replies, assign, status |
| Projects | ✅ | ✅ | ✅ | ✅ | ✅ | tasks, milestones, files, discussions (all paginated) |
| Contracts | ✅ | ✅ | ✅ | ✅ | ✅ | — |
| Tasks | ✅ | ✅ | ✅ | ✅ | ✅ | comments, checklist, followers, timers |
| Estimates | ✅ | ✅ | ✅ | ✅ | ✅ | — |
| Proposals | ✅ | ✅ | ✅ | ✅ | ✅ | comments |
| Expenses | ✅ | ✅ | ✅ | ✅ | ✅ | — |
| Staff | ✅ | ✅ | ✅ | ✅ | ✅ | — |
| Credit Notes | ✅ | ✅ | ✅ | ✅ | ✅ | — |
| Subscriptions | ✅ | ✅ | — | — | — | — |
| Payments | ✅ | ✅ | ✅ | ✅ | ✅ | — |
| Items | ✅ | ✅ | ✅ | ✅ | ✅ | — |
| Contacts | ✅ | ✅ | ✅ | ✅ | ✅ | — |
| Timesheets | ✅ | ✅ | ✅ | ✅ | ✅ | — |
| Notes | ✅ | ✅ | ✅ | ✅ | ✅ | — |
| Utilities | ✅ | — | — | — | — | currencies, countries, taxes, payment_modes, groups |
Common Operations
Customers
List all customers:
curl -s -H "X-API-KEY: $PERFEXCRM_API_KEY" "$PERFEXCRM_API_URL/customers"
Search customers:
curl -s -H "X-API-KEY: $PERFEXCRM_API_KEY" "$PERFEXCRM_API_URL/customers?search=acme"
Create a customer:
curl -s -X POST -H "X-API-KEY: $PERFEXCRM_API_KEY" -H "Content-Type: application/json" \
"$PERFEXCRM_API_URL/customers" \
-d '{"company":"Acme Corp","phonenumber":"+1234567890","city":"New York","state":"NY","country":"US"}'
Get a specific customer:
curl -s -H "X-API-KEY: $PERFEXCRM_API_KEY" "$PERFEXCRM_API_URL/customers/123"
Get customer's invoices:
curl -s -H "X-API-KEY: $PERFEXCRM_API_KEY" "$PERFEXCRM_API_URL/customers/123/invoices"
Invoices
List all invoices:
curl -s -H "X-API-KEY: $PERFEXCRM_API_KEY" "$PERFEXCRM_API_URL/invoices"
Filter overdue invoices:
curl -s -H "X-API-KEY: $PERFEXCRM_API_KEY" "$PERFEXCRM_API_URL/invoices?status=overdue"
Create an invoice:
curl -s -X POST -H "X-API-KEY: $PERFEXCRM_API_KEY" -H "Content-Type: application/json" \
"$PERFEXCRM_API_URL/invoices" \
-d '{"clientid":123,"currency":1,"items":[{"description":"Web Development","qty":1,"rate":2500}]}'
Get invoice payments (paginated):
curl -s -H "X-API-KEY: $PERFEXCRM_API_KEY" "$PERFEXCRM_API_URL/invoices/45/payments?page=1&per_page=25"
Leads
List leads:
curl -s -H "X-API-KEY: $PERFEXCRM_API_KEY" "$PERFEXCRM_API_URL/leads"
Create a lead:
curl -s -X POST -H "X-API-KEY: $PERFEXCRM_API_KEY" -H "Content-Type: application/json" \
"$PERFEXCRM_API_URL/leads" \
-d '{"name":"John Smith","email":"john@example.com","phonenumber":"+1234567890","company":"TechCorp","source":1,"status":1}'
Tickets
List open tickets:
curl -s -H "X-API-KEY: $PERFEXCRM_API_KEY" "$PERFEXCRM_API_URL/tickets?status=open"
Reply to a ticket:
curl -s -X POST -H "X-API-KEY: $PERFEXCRM_API_KEY" -H "Content-Type: application/json" \
"$PERFEXCRM_API_URL/tickets/55/replies" \
-d '{"message":"Thank you for reaching out. We are looking into this issue."}'
Assign a ticket:
curl -s -X PUT -H "X-API-KEY: $PERFEXCRM_API_KEY" -H "Content-Type: application/json" \
"$PERFEXCRM_API_URL/tickets/55/assign" \
-d '{"assigned":3}'
Projects
List projects:
curl -s -H "X-API-KEY: $PERFEXCRM_API_KEY" "$PERFEXCRM_API_URL/projects"
Get project tasks (paginated):
curl -s -H "X-API-KEY: $PERFEXCRM_API_KEY" "$PERFEXCRM_API_URL/projects/10/tasks?page=1&per_page=25"
Get project milestones:
curl -s -H "X-API-KEY: $PERFEXCRM_API_KEY" "$PERFEXCRM_API_URL/projects/10/milestones"
Tasks
Create a task:
curl -s -X POST -H "X-API-KEY: $PERFEXCRM_API_KEY" -H "Content-Type: application/json" \
"$PERFEXCRM_API_URL/tasks" \
-d '{"name":"Review proposal","rel_id":10,"rel_type":"project","startdate":"2026-03-15","duedate":"2026-03-20","priority":2,"assignees":[3]}'
Pagination
All list endpoints support pagination:
| Parameter | Default | Max | Description |
|---|---|---|---|
page | 1 | — | Page number |
per_page | 25 | 100 | Results per page |
limit | 25 | 100 | Alias for per_page |
Response includes pagination metadata:
{
"data": [...],
"meta": {
"total": 150,
"per_page": 25,
"current_page": 1,
"last_page": 6,
"from": 1,
"to": 25
}
}
Response Filtering
Select specific fields:
curl -s -H "X-API-KEY: $PERFEXCRM_API_KEY" "$PERFEXCRM_API_URL/customers?fields=id,company,phonenumber"
Include related data:
curl -s -H "X-API-KEY: $PERFEXCRM_API_KEY" "$PERFEXCRM_API_URL/projects?include=members,tasks"
Sorting & Search
# Sort by date descending
curl -s -H "X-API-KEY: $PERFEXCRM_API_KEY" "$PERFEXCRM_API_URL/invoices?sort=date&order=desc"
# Search across all fields
curl -s -H "X-API-KEY: $PERFEXCRM_API_KEY" "$PERFEXCRM_API_URL/customers?search=acme"
Webhook Events (100+)
The module fires 100+ webhook events for real-time notifications. Key events:
customer.created,customer.updated,customer.deletedinvoice.created,invoice.paid,invoice.overduelead.created,lead.converted,lead.status_changedticket.created,ticket.reply_added,ticket.status_changedproject.created,task.created,task.completedpayment.received,contract.signed,estimate.accepted
Error Handling
| Code | Meaning |
|---|---|
| 200 | Success |
| 201 | Created |
| 400 | Bad request (missing or invalid parameters) |
| 401 | Unauthorized (invalid or missing API key) |
| 403 | Forbidden (insufficient permissions) |
| 404 | Resource not found |
| 429 | Rate limited |
| 500 | Server error |
Recommended Agent Behavior
When the user asks about their CRM data:
- Always paginate large result sets — use
?per_page=25and iterate if needed - Use
?fields=to reduce response size — only fetch columns you need - Search first — use
?search=before listing all records - Summarize results — don't dump raw JSON, extract key information
- Confirm destructive actions — ask before deleting records
- Use natural language — translate user intent to the correct API call
Links
- Buy PerfexAPI Module: https://perfexapi.com
- API Documentation: https://perfexapi.com/docs
- Full Changelog: https://perfexapi.com/changelog
- MCP Integration: https://perfexapi.com/mcp (for AI coding tools)
- n8n Workflows: https://perfexapi.com/templates/n8n