Install
openclaw skills install perfexcrm-apiManage PerfexCRM from any messaging app. Full CRUD for customers, invoices, leads, tickets, projects, contracts, and 13 more resources (170 API endpoints). Check overdue invoices, create leads, reply to tickets, track project progress — all through natural conversation on WhatsApp, Telegram, Slack, or Discord.
openclaw skills install perfexcrm-apiManage 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
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/v1 suffixPERFEXCRM_API_KEY: API key created in PerfexCRM Admin > Setup > API & Webhooks > API KeysAll requests use the X-API-KEY header. The key controls which resources and operations are available.
| 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 |
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"
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"
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}'
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}'
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"
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]}'
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
}
}
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"
# 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"
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| 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 |
When the user asks about their CRM data:
?per_page=25 and iterate if needed?fields= to reduce response size — only fetch columns you need?search= before listing all records